আমাদের একটি পজিটিভ ইন্টিজার অ্যারে দেওয়া আছে। লক্ষ্য হলো এমন সাবসেট খুঁজে বের করা যাতে প্রতিটি সাবসেটে পৃথক (distinct) জোড় (even) সংখ্যা থাকে। একই উপাদানগুলো দিয়ে বने সেটগুলো ১ বলে গণ্য হবে। [2,4,6] এবং [6,2,4] একই সেট।
উদাহরণ দিয়ে বুঝি
ইনপুট − arr[] = {1,3,5,7,8,3,2 };
আউটপুট − পৃথক জোড় সংখ্যা বিশিষ্ট সাবসেট: ৩
ব্যাখ্যা − সাবসেট: [2], [8], [2,8]
ইনপুট − arr[] = {2,4,6 };
আউটপুট − পৃথক জোড় সংখ্যা বিশিষ্ট সাবসেট: ৭
ব্যাখ্যা − সাবসেট: [2], [4], [6], [2,4], [2,6], [4,6], [2,4,6]
প্রোগ্রামে ব্যবহৃত পদ্ধতি
অ্যারেতে থাকা সব জোড় সংখ্যা একটা সেটে (unordered_set) রাখি। এতে পৃথক জোড় সংখ্যার কাউন্ট পাওয়া যায়। সাবসেট সংখ্যা হবে 2^(even count) - 1।
- অ্যারে
arr[]নিন। subset_even(int arr[], int size)ফাংশন অ্যারে নিয়ে পৃথক জোড় সংখ্যা সাবসেট রিটার্ন করে।- প্রাথমিক কাউন্ট ০।
unordered_set<int> un_setজোড় সংখ্যা রাখতে।i=0থেকেsizeপর্যন্ত লুপে:arr[i]%2==0হলেun_set.insert(arr[i])।count = un_set.size()(পৃথক জোড় সংখ্যা)।count = pow(2, count) - 1আপডেট করুন।countরিটার্ন করুন।
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
int subset_even(int arr[], int size) {
int count = 0;
unordered_set<int> un_set;
for (int i = 0; i < size; i++) {
if (arr[i] % 2 == 0) {
un_set.insert(arr[i]);
}
}
count = un_set.size();
count = pow(2, count) - 1;
return count;
}
int main() {
int arr[] = {10, 4, 21, 3, 5, 7, 6, 8};
int size = sizeof(arr) / sizeof(arr[0]);
cout << "Count of subsets having distinct even numbers are: " << subset_even(arr, size);
return 0;
}
আউটপুট
Count of subsets having distinct even numbers are: 15