ধরুন আমাদের 3টি ধনাত্মক সংখ্যা a, b এবং c আছে। (a OR b ==c ) তৈরি করতে আমাদের a এবং b এর কিছু বিটগুলিতে প্রয়োজনীয় ন্যূনতম ফ্লিপগুলি খুঁজে বের করতে হবে। এখানে আমরা বিটওয়াইজ বা অপারেশন বিবেচনা করছি।
ফ্লিপ অপারেশনটি তাদের বাইনারি উপস্থাপনায় যেকোনো একক বিট 1 থেকে 0 পরিবর্তন বা বিট 0 থেকে 1 পরিবর্তন করে। তাই যদি a :0010 এবং b :=0110 হয়, তাহলে c হল 0101, ফ্লিপ করার পরে, a হবে 0001, এবং b হবে 0100
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- উত্তর :=0
- আমি 0 থেকে 31 রেঞ্জের জন্য
- bitC :=(c / 2^i) এবং 1
- bitA :=(a / 2^i) এবং 1
- bitB :=(b / 2^i) এবং 1
- যদি (bitA বা bitB) bitC এর মত না হয়, তাহলে
- যদি bitC হয় 0
- যদি bitA =1 এবং bitB =1 হয়, তাহলে উত্তর 2 দ্বারা বাড়ান, অন্যথায় 1 দ্বারা উত্তর বাড়ান
- অন্যথায় 1 দ্বারা উত্তর বাড়ান
- যদি bitC হয় 0
- উত্তর ফেরত দিন
উদাহরণ(C++)
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
#include <bits/stdc++.h> using namespace std; class Solution { public: int minFlips(int a, int b, int c) { int ans = 0; for(int i = 0; i < 32; i++){ int bitC = (c >> i) & 1; int bitA = (a >> i) & 1; int bitB = (b >> i) & 1; if((bitA || bitB) != bitC){ if(!bitC){ if(bitA == 1 && bitB == 1){ ans += 2; } else { ans += 1; } } else{ ans += 1; } } } return ans; } }; main(){ Solution ob; cout << (ob.minFlips(2,6,5)); }
ইনপুট
2 6 5
আউটপুট
3