এই সমস্যাটিতে, আমাদেরকে n উপাদানগুলির একটি অ্যারে এবং একটি পূর্ণসংখ্যার মান k দেওয়া হয়েছে। আমাদের কাজ হল অ্যারের সমস্ত উপাদানের XOR খুঁজে বের করা যেখানে k এর সমান বিট সেট করা আছে।
সমস্যাটি বোঝার জন্য একটি উদাহরণ দেওয়া যাক,
ইনপুট
array = {2, 12, 44, 103, 17} , K =3
আউটপুট
44
এই সমস্যা সমাধানের জন্য, আমরা অ্যারের প্রতিটি উপাদানের সেট বিট গণনা করব এবং k এর সাথে তুলনা করব। যদি সেট বিটের সংখ্যা k এর সমান হয়, তাহলে আমরা এটিকে একটি ভেক্টরে ঠেলে দেব এবং ভেক্টরের সমস্ত উপাদানের XOR খুঁজে বের করব।
সেট বিট গণনা খোঁজার জন্য আমরা __builtin_popcount() ব্যবহার করব যা c++ এ একটি বিল্ট-ইন ফাংশন।
আমাদের সমাধানের বাস্তবায়ন দেখানোর জন্য প্রোগ্রাম,
উদাহরণ
#include <bits/stdc++.h> using namespace std; int XorKSetBits(int arr[], int n, int k){ vector<int> kBitElments; for (int i = 0; i < n; i++) { if (__builtin_popcount(arr[i]) == k) { kBitElments.push_back(arr[i]); } } int result = kBitElments[0]; for (int i = 1; i < kBitElments.size(); i++) result ^= kBitElments[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