এই সমস্যাতে, আমাদের n সংখ্যক উপাদান সহ একটি অ্যারে এবং একটি পূর্ণসংখ্যা k দেওয়া আছে। আমাদের কাজ হলো অ্যারেতে সেই সব উপাদানের XOR বের করা যাদের সেট বিটের সংখ্যা k-এর সমান।
উদাহরণ
মনে করুন, ইনপুট:
array = {2, 12, 44, 103, 17} , K = 3 আউটপুট:
44
সমাধান পেতে, আমরা অ্যারের প্রতিটি উপাদানের সেট বিট গণনা করব এবং তা k-এর সাথে তুলনা করব। যদি সেট বিটের সংখ্যা k-এর সমান হয়, তবে সেটি একটি ভেক্টরে সংরক্ষণ করব এবং পরে সেই ভেক্টরের সব উপাদানের XOR বের করব।
সেট বিট গণনার জন্য C++-এর বিল্ট-ইন ফাংশন __builtin_popcount() ব্যবহার করা হয়।
প্রোগ্রাম উদাহরণ
#include <bits/stdc++.h>
using namespace std;
int XorKSetBits(int arr[], int n, int k) {
vector<int> kBitElements;
for (int i = 0; i < n; i++) {
if (__builtin_popcount(arr[i]) == k) {
kBitElements.push_back(arr[i]);
}
}
int result = kBitElements[0];
for (int i = 1; i < kBitElements.size(); i++)
result ^= kBitElements[i];
return result;
}
int main() {
int arr[] = { 2, 12, 44, 103, 17 };
int n = sizeof(arr) / sizeof(arr[0]);
int k = 3;
cout << "XOR of all element of the array with " << k << " set bits is : " << XorKSetBits(arr, n, k);
return 0;
} আউটপুট
XOR of all element of the array with 3 set bits is : 44