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

C++ में Dota2 सीनेट विजय भविष्यवाणी


मान लीजिए Dota2 की दुनिया में, दो पार्टियां हैं - द रेडिएंट और द डायर। Dota2 सीनेट में दो पार्टियों से आने वाले सीनेटर होते हैं। अब सीनेट Dota2 गेम में कुछ बदलाव पर निर्णय लेना चाहती है। इस परिवर्तन के लिए मतदान एक राउंड-आधारित प्रक्रिया है। प्रत्येक राउंड में, प्रत्येक सीनेटर दो अधिकारों में से एक का प्रयोग कर सकता है:

  • एक सीनेटर के अधिकार पर प्रतिबंध लगाएं - एक सीनेटर किसी अन्य सीनेटर को इस और सभी बाद के राउंड में अपने सभी अधिकार खोने के लिए मजबूर कर सकता है।
  • विजय की घोषणा करें - यदि यह सीनेटर पाता है कि मतदान का अधिकार रखने वाले सभी सीनेटर एक ही पार्टी से हैं, तो वह विजय की घोषणा कर सकता है और गेम में बदलाव के बारे में निर्णय ले सकता है।

एक स्ट्रिंग दी गई है जो प्रत्येक सीनेटर की पार्टी संबंधित को दर्शाती है। वर्ण 'R' और 'D' क्रमशः रेडिएंट पार्टी और डायर पार्टी का प्रतिनिधित्व करते हैं। यदि n सीनेटर हैं, तो दी गई स्ट्रिंग का आकार n होगा।

राउंड-आधारित प्रक्रिया दी गई क्रम में पहले सीनेटर से अंतिम सीनेटर तक शुरू होती है। यह प्रक्रिया मतदान के अंत तक चलेगी। जिन सीनेटरों ने अपने अधिकार खो दिए हैं, उन्हें प्रक्रिया के दौरान छोड़ दिया जाएगा।

मान लीजिए हर सीनेटर काफी समझदार है और अपनी पार्टी के लिए सर्वोत्तम रणनीति खेलेगा, आप भविष्यवाणी करना चाहते हैं कि कौन सी पार्टी अंततः विजय की घोषणा करेगी और Dota2 गेम में बदलाव करेगी। आउटपुट रेडिएंट या डायर होना चाहिए।

उदाहरण के लिए, यदि इनपुट "RDD" जैसा है, तो यह डायर होगा। ऐसा इसलिए है क्योंकि पहला सीनेटर रेडिएंट से आता है और वह राउंड 1 में अगले सीनेटर के अधिकार पर प्रतिबंध लगा सकता है। और दूसरा सीनेटर अब कोई अधिकार नहीं प्रयोग कर सकता क्योंकि उसका अधिकार प्रतिबंधित कर दिया गया है। उसके बाद तीसरा सीनेटर डायर से आता है और वह राउंड 1 में पहले सीनेटर के अधिकार पर प्रतिबंध लगा सकता है। अब राउंड 2 में, तीसरा सीनेटर बस विजय की घोषणा कर सकता है क्योंकि वह सीनेट में एकमात्र व्यक्ति है जो मतदान कर सकता है।

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

  • एक क्यू q1, q2 बनाएं, n := स्ट्रिंग का आकार। सभी R के लिए q1 में डालें, और सभी D के लिए, q2 में डालें।
  • जब तक दोनों क्यू खाली नहीं हैं
    • यदि q1 का फ्रंट तत्व < q2 का फ्रंट तत्व, तो
      • n को q1 में डालें, q2 और q1 से हटाएं
    • अन्यथा n को q2 में डालें, q2 और q1 से हटाएं
    • n को 1 से बढ़ाएं
  • यदि क्यू खाली है, तो डायर लौटाएं, अन्यथा, रेडिएंट लौटाएं

उदाहरण (C++)

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

#include <bits/stdc++.h> using namespace std; class Solution {    public:    string predictPartyVictory(string s) {       queue <int> q1, q2;       int n = s.size();       for(int i = 0; i < s.size(); i++){          if(s[i] == 'R'){             q1.push(i);          } else {             q2.push(i);          }       }       while(q1.size() && q2.size()){          if(q1.front() < q2.front()){             q1.push(n);             q2.pop();             q1.pop();          } else {             q2.push(n);             q2.pop();             q1.pop();          }          n++;       }       return q1.empty()? "Dire" : "Radiant";    } }; main(){    Solution ob;    cout <<(ob.predictPartyVictory("RDD")); }

इनपुट

"RDD"

आउटपुट

Dire

  1. - जोड़ियों की सबसे लंबी चेन

    जोड़ियों की एक चेन दी गई है। प्रत्येक जोड़ी में दो पूर्णांक होते हैं और पहला पूर्णांक हमेशा छोटा होता है, और दूसरा बड़ा होता है, यही नियम चेन निर्माण पर भी लागू होता है। एक जोड़ी (x, y) को जोड़ी (p, q) के बाद तभी जोड़ा जा सकता है जब q < x हो। इस समस्या को हल करने के लिए, सबसे पहले हमें दिए गए जोड़ि

  1. C++ में अधिकतम मोड़ों वाला पथ लंबाई C++ में अधिकतम मोड़ों वाला पथ लंबाई

    एक समस्या को हल करने के लिए जिसमें हमें एक बाइनरी ट्री दिया गया है। अब हमें अधिकतम संख्या में मोड़ों वाला पथ खोजने की आवश्यकता है। यानी, एक मोड़ तब माना जाता है जब पथ की दिशा बाएं से दाएं या इसके विपरीत बदलती है, उदाहरण के लिएइनपुट -आउटपुट -6अब इस दृष्टिकोण में, हम ट्री को पार करेंगे और पिछली गतिविध

  1. C++ में बाइनरी ट्री में अधिकतम लगातार बढ़ते पथ की लंबाई C++ में बाइनरी ट्री में अधिकतम लगातार बढ़ते पथ की लंबाई

    समस्या विवरण मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें सबसे लंबे पथ की लंबाई की गणना करनी है जिसमें लगातार मानों वाले नोड्स बढ़ते क्रम में हों। प्रत्येक नोड को लंबाई 1 के पथ के रूप में माना जाएगा। उदाहरण आउटपुट 3 होगा क्योंकि (11, 12, 13) अधिकतम लगातार पथ है। एल्गोरिदम चरण फ़ंक्शन solve(root,