বিবরণ
আকারের একটি অ্যারে দেওয়া, N. একটি উপাদান X খুঁজুন যাতে অ্যারের উপাদানগুলির যোগফল ন্যূনতম হওয়া উচিত যখন X এবং একটি অ্যারের প্রতিটি উপাদানের সাথে XOR অপারেশন করা হয়৷
যদি ইনপুট অ্যারে হয়:arr [] ={8, 5, 7, 6, 9} তাহলে ন্যূনতম যোগফল হবে 30 অ্যারের উপাদানগুলির বাইনারি উপস্থাপনা হল:8 :10005 :01017 :01116 :01019 :1001 যদি X =5 XOR সম্পাদনের পর যোগফল হবে 30:8 ^ 5 =135 ^ 5 =07 ^ 5 =26 ^ 5 =39 ^ 5 =12 যোগফল =30 (13 + 0 + 2 + 3 + 12)
অ্যালগরিদম
<পূর্ব>1. 32 আকারের একটি বিটম্যাপ তৈরি করুন যেহেতু আমরা 32 বিট পূর্ণসংখ্যা ব্যবহার করছি।2। একটি অ্যারের উপর এবং একটি অ্যারের প্রতিটি উপাদানের জন্য পুনরাবৃত্তি করুন:a। যদি একটি উপাদানের 0 তম বিট সেট করা হয় তবে বিটম্যাপ[0] খ. যদি কোনো এলিমেন্টের ১ম বিট সেট করা হয় তাহলে বিটম্যাপ[1] এর সংখ্যা বৃদ্ধি করে। এখন নিম্নরূপ বিটম্যাপ অ্যারেতে পুনরাবৃত্তি করে X খুঁজুন:if bitMap[i]> n/2:thenX =X + pow(2, i);4। ইনপুট অ্যারে উপর পুনরাবৃত্তি. X এবং একটি অ্যারে5 এর প্রতিটি উপাদানের সাথে XOR অপারেশন সম্পাদন করুন। অ্যারে উপাদানের যোগফল গণনা করুনউদাহরণ
#include#include #include নেমস্পেস std ব্যবহার করে;#SIZE(arr) (sizeof(arr) / sizeof(arr[0]))const int MAX_SIZE =32;int getSum সংজ্ঞায়িত করুন (int *arr, int n){ int bitMap[MAX_SIZE]; int bitLength =0; int sum =0; int res =0; পূরণ করুন(bitMap, bitMap + n, 0); জন্য (int i =0; i 0) { int rem =num % 2; num =num / 2; যদি (rem ==1) { bitMap[f]++; } ++f; bitLength =max(bitLength, f); } } int প্রার্থী =0; জন্য (int i =0; i n / 2) { প্রার্থী +=সংখ্যা; } } এর জন্য (int i =0; i আউটপুট
আপনি যখন উপরের প্রোগ্রামটি কম্পাইল এবং এক্সিকিউট করবেন। এটি নিম্নলিখিত আউটপুট −
তৈরি করেসর্বনিম্ন যোগফল:30