কম্পিউটার টিউটোরিয়াল

সি++ প্রোগ্রাম: XOR গেমের ফলাফল ০ কিনা চেক করা

মান লিন একটি অ্যারে A N এলিমেন্টসহ এবং একটি বাইনারি স্ট্রিং S। দুজন খেলোয়ার একটা গেম খেলছে। তাদের নম্বর ০ এবং ১। একটি ভেরিয়েবল x আছে যার প্রাথমিক মান ০। গেমে N রাউন্ড আছে। i-তম রাউন্ডে S[i] ব্যক্তি নিচের কাজগুলোর একটা করবে: x কে x XOR A[i] দিয়ে রিপ্লেস করবে, অন্যথায় কিছুই করবে না। পার্সন ০ চায় গেমের শেষে x ০ হোক, পার্সন ১ চায় নন-জিরো। আমরা চেক করব শেষে x ০ হয় কিনা।

ইনপুট A = [1, 2], S = "10" হলে আউটপুট ১, কারণ পার্সন ১ x কে 0 XOR 1 = 1 করে দেয়, তাই পার্সন ০ যেটা করুক কেনো x ১ ही থাকবে।

পদ্ধতি (Steps)

N := A-এর সাইজ
judge নামক অ্যারে সাইজ ৬০ দিয়ে ডিক্লেয়ার
z := 0
judge ০ দিয়ে ফিল করুন
n := N-1 থেকে ০ পর্যন্ত লুপ (নাম কমাতে), প্রতিটি n এর জন্য:
    x := A[n]
    무기한 লুপ (while 1):
        যদি x == 0 হয়, তবে ব্রেক
        y := x
        I := -1
        i = 0 থেকে ৫৯ পর্যন্ত লুপ:
            যদি y % 2 == 1 হয়, তবে I := i
            y := y / 2
        যদি judge[I] == 0 হয়, তবে
            judge[I] := x
            ব্রেক
        x := x XOR judge[I]
    যদি S[n] != '0' হয়, তবে
        যদি x != 0 হয়, তবে z := 1
রিটার্ন z

উদাহরণ কোড (C++)

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A, string S) {
    int N = A.size();
    int judge[60];
    int z = 0;
    fill(judge, judge + 60, 0);
    for (int n = N - 1; n >= 0; n--) {
        int x = A[n];
        while (1) {
            if (x == 0) break;
            int y = x;
            int I = -1;
            for (int i = 0; i < 60; i++) {
                if (y % 2 == 1) I = i;
                y /= 2;
            }
            if (judge[I] == 0) {
                judge[I] = x;
                break;
            }
            x ^= judge[I];
        }
        if (S[n] != '0') {
            if (x != 0) z = 1;
        }
    }
    return z;
}
int main() {
    vector<int> A = {1, 2};
    string S = "10";
    cout << solve(A, S) << endl;
}

ইনপুট

{1, 2}, "10"

আউটপুট

1
  1. C++-এ বাইনারি ট্রি হাইট-ব্যালেন্সড কিনা যাচাই করার প্রোগ্রাম

  2. সি++ STL ব্যবহার করে অ্যারে প্যালিনড্রোম কিনা তা যাচাই করার প্রোগ্রাম

  3. সি++-এ প্রথ নাম্বার (Proth Number) যাচাই করার প্রোগ্রাম

  4. সি++-এ অ্যারে বিটোনিক (Bitonic) কিনা তা যাচাই করার প্রোগ্রাম