সংখ্যার সমতার সম্ভাবনা খুঁজে বের করতে, অর্থাৎ, এটি জোড় বা বিজোড় এবং প্রদত্ত ব্যাপ্তির জন্য। প্রতিটি প্রশ্নের জন্য, আমাদের p / q দ্বারা সম্ভাব্যতা উপস্থাপন করে p এবং q প্রিন্ট করতে হবে, উদাহরণস্বরূপ।
Input : N = 5, arr[] = { 6, 5, 2, 1, 7 }
query 1: 0 2 2
query 2: 1 2 5
query 3: 0 1 4
Output : 0
3 4
1 2 এই সমস্যায়, আমরা সেই সূচক না হওয়া পর্যন্ত বিজোড় এবং জোড় সংখ্যার সংখ্যা বিশিষ্ট দুটি অ্যারে বজায় রাখব। এটি আমাদের সমস্যাগুলিকে সহজ করে, এবং এখন আমাদের তাদের গণনা এবং সেই পরিসরে উপস্থিত উপাদানগুলির সংখ্যা প্রিন্ট করতে হবে৷
সমাধান খোঁজার পদ্ধতি
এই পদ্ধতিতে, আমরা দুটি অ্যারে বজায় রাখি। তারা ith সূচক পর্যন্ত পাওয়া জোড় এবং বিজোড় সংখ্যার সংখ্যা ধারণ করে এবং উপসর্গ যোগ সমস্যার মতো এই সমস্যার সমাধান করে।
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
void solve(int arr[], int n, int Q,int query[][3]){
int even[n + 1]; // our array for counting the number of evens find till ith index
int odd[n + 1]; // our array for counting the number of odds find till ith index
even[0] = 0; odd[0] = 0; // as we are doing 1 based indexing so we just set 0th index of both arrays to 0
for (int i = 0; i < n; i++) {
if (arr[i] & 1) { // if we found odd number we increment odd
odd[i + 1] = odd[i] + 1;
even[i + 1] = even[i];
}
else { // else we increment even
even[i + 1] = even[i] + 1;
odd[i + 1] = odd[i];
}
}
for (int i = 0; i < Q; i++) { // traversing the queries
int r = query[i][2]; // right range
int l = query[i][1]; // left range
int k = query[i][0]; // type of query
int q = r - l + 1; // number of elements in the given range
int p;
if (k) // k is the type of query and we are finding the
//number of elements with same parity in the given range
p = odd[r] - odd[l - 1];
else
p = even[r] - even[l - 1];
if (!p) // if p is zero we simply print 0
cout << "0\n";
else if (p == q) // if p == q we print 1
cout << "1\n";
else {
int g = __gcd(p, q);
cout << p / g << " " << q / g << "\n"; // as p and shouldn't have a common gcd so we divide the gcd
}
}
}
int main(){
int arr[] = { 6, 5, 2, 1, 7 }; // given array
int n = sizeof(arr) / sizeof(int); // size of our array
int Q = 2; // number of our queries
int query[Q][3] = {{ 0, 2, 2 },{ 1, 2, 5 }}; // given queries
solve(arr, n, Q, query);
return 0;
} আউটপুট
0 3 4
উপরের কোডের ব্যাখ্যা
উপরের পদ্ধতিতে, আমরা দুটি অ্যারে বজায় রেখে ith সূচকে পাওয়া জোড় এবং বিজোড় সংখ্যার সংখ্যা গণনা করি। এখন আমাদের প্রদত্ত পরিসরে বিদ্যমান জোড় বা বিজোড় সংখ্যার সংখ্যা খুঁজে বের করতে হবে এবং সেই সংখ্যাটি প্রিন্ট করতে হবে এবং উপস্থিত মোট উপাদানের সংখ্যা প্রিন্ট করতে হবে।
উপসংহার
এই টিউটোরিয়ালে, আমরা প্রদত্ত রেঞ্জে জোড় বা বিজোড় সংখ্যার সম্ভাব্যতার প্রশ্নগুলি সমাধান করি। আমরা এই সমস্যার জন্য C++ প্রোগ্রাম এবং সম্পূর্ণ পদ্ধতি (স্বাভাবিক) শিখেছি যার মাধ্যমে আমরা এই সমস্যার সমাধান করেছি। আমরা অন্যান্য ভাষা যেমন সি, জাভা, পাইথন এবং অন্যান্য ভাষায় একই প্রোগ্রাম লিখতে পারি। আমরা আশা করি আপনার এই টিউটোরিয়ালটি সহায়ক হবে৷