তিনটি বাইনারি সিকোয়েন্স A, B, C দেওয়া আছে (দৈর্ঘ্য N)। A এবং B-তে ন্যূনতম কতগুলো বিট ফ্লিপ করলে A XOR B = C হবে তা বের করতে হবে।
XOR ট্রুথ টেবিল
| X | Y | X XOR Y |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
নियम
- A[i]==B[i] এবং C[i]==0 → ফ্লিপ দরকার নেই।
- A[i]==B[i] এবং C[i]==1 → A[i] বা B[i] ফ্লিপ (কাউন্ট++)।
- A[i]!=B[i] এবং C[i]==0 → ফ্লিপ (কাউন্ট++)।
- A[i]!=B[i] এবং C[i]==1 → ফ্লিপ দরকার নেই।
উদাহরণ
ইনপুট: A={0,0,0,0}, B={1,0,1,0}, C={1,1,1,1}
আউটপুট: ২
ইনপুট: A={0,0,1,1}, B={0,0,1,1}, C={0,0,1,1}
আউটপুট: ২
C++ প্রোগ্রাম উদাহরণ
#include <bits/stdc++.h>
using namespace std;
int flipCount(int A[], int B[], int C[], int N) {
int count = 0;
for (int i = 0; i < N; i++) {
if (A[i] == B[i] && C[i] == 1) count++;
else if (A[i] != B[i] && C[i] == 0) count++;
}
return count;
}
int main() {
int N = 5;
int a[] = {1,0,0,0,0};
int b[] = {0,0,0,1,0};
int c[] = {1,0,1,1,1};
cout << "ন্যূনতম বিট ফ্লিপ: " << flipCount(a, b, c, N);
return 0;
}
আউটপুট
ন্যূনতম বিট ফ্লিপ: 2