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

C++ में फ्लिप गेम II

मान लीजिए दो खिलाड़ी हैं जो फ्लिप गेम खेल रहे हैं। यहां हमारे पास एक स्ट्रिंग है जिसमें केवल ये दो वर्ण हैं:+ और -, खिलाड़ी 1 और खिलाड़ी 2 लगातार दो "++" को "-" में फ़्लिप करने के लिए ले जाते हैं। खेल तब समाप्त होता है जब एक खिलाड़ी आगे नहीं बढ़ पाता है और इसलिए दूसरा विजेता होगा। हमें यह जांचने के लिए एक फ़ंक्शन परिभाषित करना होगा कि क्या शुरुआती खिलाड़ी जीत की गारंटी दे सकता है।

इसलिए, यदि इनपुट s ="++++" जैसा है, तो आउटपुट सही होगा, क्योंकि शुरुआती खिलाड़ी "+--+" बनने के लिए मध्य "++" को फ़्लिप करके जीत की गारंटी दे सकता है।

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

  • एक मैप मेमो परिभाषित करें

  • फ़ंक्शन को हल करें () परिभाषित करें, इसमें s लगेगा,

  • अगर मेमो में है, तो -

    • वापसी मेमो[s]

  • संभव :=असत्य

  • n :=s का आकार

  • इनिशियलाइज़ i :=0 के लिए, जब i

    • यदि s[i] '+' के समान है और s[i + 1] '+' के समान है, तो -

      • s[i] :='-', s[i + 1] :='-'

      • संभव:=संभव या हल के विपरीत

      • s[i] :='+', s[i + 1] :='+'

      • यदि संभव हो तो गैर-शून्य है, तो -

        • वापसी ज्ञापन [s] :=संभव

  • वापसी ज्ञापन [s] :=संभव

  • मुख्य विधि से निम्नलिखित करें -

  • वापसी समाधान(ओं)

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   unordered_map <string, bool> memo;
   bool solve(string s){
      if (memo.count(s))
         return memo[s];
      bool possible = false;
      int n = s.size();
      for (int i = 0; i < n - 1; i++) {
         if (s[i] == '+' && s[i + 1] == '+') {
            s[i] = '-';
            s[i + 1] = '-';
            possible |= !solve(s);
            s[i] = '+';
            s[i + 1] = '+';
            if (possible)
               return memo[s] = possible;
         }
      }
      return memo[s] = possible;
   }
   bool canWin(string s) {
      return solve(s);
   }
};
main(){
   Solution ob;
   cout << (ob.canWin("++++"));
}

इनपुट

"++++"

आउटपुट

1

  1. सी++ में जंप गेम IV

    मान लीजिए कि हमारे पास arr नामक पूर्णांकों की एक सरणी है। हम शुरुआत में इंडेक्स 0 पर हैं। एक चरण में हम इंडेक्स i से i + x पर जा सकते हैं जहां:i + x =0. j जहां:arr[i] और arr[j] समान हैं और i और j समान नहीं हैं। यहाँ n सरणी का आकार है। सरणी के अंतिम सूचकांक तक पहुंचने के लिए हमें न्यूनतम चरणों की संख

  1. सी++ में जंप गेम वी

    मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी है जिसे arr और एक पूर्णांक d कहा जाता है। एक चरण में हम इंडेक्स i से − . पर जा सकते हैं i + x जहां:i + x

  1. सी ++ एसटीएल में बिटसेट ::फ्लिप ()

    बिटसेट फ्लिप () विधि C++ STL (स्टैंडर्ड टेम्प्लेट लाइब्रेरी) की एक इनबिल्ट विधि है। यह कॉलिंग बिटसेट के बिट्स को फ़्लिप करता है। यह विधि सभी 0 से 1 और सभी 1 से 0 तक फ़्लिप करती है, जिसका अर्थ है कि जब कोई पैरामीटर पारित नहीं होता है तो यह कॉलिंग बिटसेट के प्रत्येक बिट को उलट देता है। यदि कोई पैरामी