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

सी ++ प्रोग्राम xor गेम के परिणाम 0 या नहीं की जांच करने के लिए

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

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

कदम

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

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++

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें जांचना है कि इसकी ऊंचाई संतुलित है या नहीं। हम जानते हैं कि एक संतुलित ऊंचाई वाले पेड़ के लिए, पेड़ में प्रत्येक नोड के लिए, इसके बाएं उपट्री की ऊंचाई और इसके दाएं उपट्री की ऊंचाई का पूर्ण अंतर 0 या 1 है। तो, अगर इनपुट पसंद है तो आउटपुट सही होगा इसे ह

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

    एन पूर्णांकों की एक सरणी गिरफ्तारी [एन] को देखते हुए, कार्य यह पता लगाना है कि सरणी एक पैलिंड्रोम है या नहीं। हमें बताए गए कार्य को C++ में STL का उपयोग करके करना है। सी ++ में एसटीएल (स्टैंडर्ड टेम्प्लेट लाइब्रेरी) की एक विशेषता है, यह सी ++ टेम्प्लेट क्लासेस का एक सेट है जो डेटा संरचनाओं और ढेर,

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

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