Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ प्रोग्राम: XOR गेम परिणाम 0 है या नहीं जांचें


मान लीजिए हमारे पास N तत्वों वाला एक सरणी A और एक अन्य बाइनरी स्ट्रिंग S है। मान लें कि दो खिलाड़ी एक गेम खेल रहे हैं। वे 0 और 1 के रूप में संख्यांकित हैं। एक चर x है जिसका प्रारंभिक मान 0 है। गेम के N राउंड हैं। i-वें राउंड में व्यक्ति S[i] निम्नलिखित में से एक करता है: x को x XOR A[i] से बदलें, अन्यथा कुछ न करें। व्यक्ति 0 इस गेम के अंत में 0 चाहता है लेकिन व्यक्ति 1 गैर-शून्य चाहता है। हमें जांचना है कि अंत में x 0 हो जाता है या नहीं।

उदाहरण के लिए, यदि इनपुट A = [1, 2]; S = "10" है, तो आउटपुट 1 होगा, क्योंकि व्यक्ति 1 x को 0 XOR 1 = 1 से बदलता है, तो यह व्यक्ति 0 की पसंद की परवाह किए बिना हमेशा 1 रहेगा।

चरण

इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे:

N := size of A Define an array judge of size: 60. z := 0 fill judge with 0 for initialize n := N - 1, when 0 <= n, update (decrease n by 1), do:    x := A[n]    loop through the following unconditionally, do:       if x is same as 0, then:          Come out from the loop       y := x       I := -1       for initialize i := 0, when i < 60, update (increase i by 1), do:          if y mod 2 is same as 1, then:             I := i          y := y / 2       if judge[I] is same as 0, then:          judge[I] := x          Come out from the loop       x := x XOR judge[I]    if S[n] is not equal to '0', then:       if x is not equal to 0, then:          z := 1 return z

उदाहरण

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:

#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; 0 <= n; 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++ में जांचें कि बाइनरी ट्री ऊंचाई-संतुलित है या नहीं C++ में जांचें कि बाइनरी ट्री ऊंचाई-संतुलित है या नहीं

    एक बाइनरी ट्री ऊंचाई-संतुलित (height-balanced) होता है यदि प्रत्येक नोड के लिए उसके बाएं और दाएं सबट्री की ऊंचाई का निरपेक्ष अंतर 0 या 1 हो। दिए गए ट्री के लिए आउटपुट true (1) है। समाधान दृष्टिकोण (पोस्ट-ऑर्डर DFS) एक ग्लोबल फ्लैग ret = true रखें। dfs(node) फंक्शन नोड की ऊंचाई वापस करता है: यदि न

  1. C++ में STL का उपयोग करके जांचें कि क्या सरणी पैलिंड्रोम है या नहीं C++ में STL का उपयोग करके जांचें कि क्या सरणी पैलिंड्रोम है या नहीं

    n पूर्णांकों की एक सरणी arr[n] दी गई है, कार्य यह जांचना है कि क्या सरणी एक पैलिंड्रोम है या नहीं। हमें C++ में STL (स्टैंडर्ड टेम्पलेट लाइब्रेरी) का उपयोग करके यह कार्य करना है। C++ में STL (Standard Template Library) की एक विशेषता है, यह C++ टेम्पलेट कक्षाओं का एक समूह है जिसका उपयोग डेटा संरचना

  1. C++ में सरणी की बिटोनिसिटी की जांच करें C++ में सरणी की बिटोनिसिटी की जांच करें

    N पूर्णांकों की एक सरणी arr[N] दी गई है, कार्य यह जांचना है कि दी गई सरणी बिटोनिक है या नहीं। यदि दी गई सरणी बिटोनिक है तो हां यह एक बिटोनिक सरणी है प्रिंट करें, अन्यथा नहीं यह बिटोनिक सरणी नहीं है प्रिंट करें। एक बिटोनिक सरणी वह है जब सरणी पहले सख्ती से बढ़ते क्रम में होती है और फिर सख्ती से घटते