সমস্যা বিবৃতি
আমরা n উপাদানের একটি অ্যারে দেওয়া হয়. কাজটি হল পুরো অ্যারের 0 এর XOR তৈরি করা। এটি অর্জন করতে আমরা নিম্নলিখিতগুলি করতে পারি।
আমরা যে কোনো একটি উপাদান নির্বাচন করতে পারি −
- উপাদান নির্বাচন করার পরে, আমরা এটিকে 1 দ্বারা বৃদ্ধি বা হ্রাস করতে পারি।
- পুরো অ্যারের XOR যোগফলকে শূন্য করার জন্য নির্বাচিত উপাদানটির জন্য প্রয়োজনীয় ন্যূনতম সংখ্যা বৃদ্ধি/কমানোর অপারেশন আমাদের খুঁজে বের করতে হবে
উদাহরণ
যদি arr[] ={2, 4, 7} হয় তাহলে 1টি অপারেশন প্রয়োজন −
- উপাদান 2 নির্বাচন করুন
- এটি 1 দ্বারা হ্রাস করুন
- এখন অ্যারে হল {3, 4, 7} এবং এর XOR হল 0
অ্যালগরিদম
- পুরো অ্যারের XOR খুঁজুন
- এখন, ধরুন আমরা arr[i] উপাদান নির্বাচন করেছি, তাই সেই উপাদানটির জন্য প্রয়োজনীয় খরচ হবে পরম(arr[i]-(XORsum^arr[i]))
- প্রতিটি উপাদানের জন্য এই পরম মানগুলির ন্যূনতম গণনা করা আমাদের ন্যূনতম প্রয়োজনীয় অপারেশন হবে
উদাহরণ
#include <iostream> #include <climits> #include <cmath> using namespace std; void getMinCost(int *arr, int n) { int operations = INT_MAX; int elem; int xorValue = 0; for (int i = 0; i < n; ++i) { xorValue = xorValue ^ arr[i]; } for (int i = 0; i < n; ++i) { if (operations > abs((xorValue ^ arr[i]) - arr[i])) { operations = abs((xorValue ^ arr[i]) - arr[i]); elem = arr[i]; } } cout << "Element= " << elem << endl; cout << "Minimum required operations = " << abs(operations) << endl; } int main() { int arr[] = {2, 4, 7}; int n = sizeof(arr) / sizeof(arr[0]); getMinCost(arr, n); return 0; }
আউটপুট
যখন আপনি উপরের প্রোগ্রামটি কম্পাইল এবং এক্সিকিউট করবেন। এটি নিম্নলিখিত আউটপুট তৈরি করে:
Element = 2 Minimum required operations = 1