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

C++ . में N दिनों के बाद जेल की कोठरी

मान लीजिए कि एक पंक्ति में 8 जेल प्रकोष्ठ हैं, और प्रत्येक कक्ष में एक कैदी है या वह खाली है। प्रत्येक दिन में, चाहे सेल व्यस्त हो या खाली हो, निम्नलिखित नियमों के अनुसार बदल जाता है -

  • अगर एक सेल में दो आसन्न पड़ोसी हैं जो दोनों पर कब्जा कर लिया है या दोनों खाली हैं, तो सेल पर कब्जा हो जाता है।

  • नहीं तो यह खाली हो जाता है।

हम कारागार की वर्तमान स्थिति का वर्णन इस प्रकार करेंगे:यदि i-th कक्ष भरा हुआ है, तो कक्ष [i] 1 होगा, अन्यथा कक्ष [i] 0 होंगे।

तो हमारे पास जेल की प्रारंभिक स्थिति है, फिर एन दिनों के बाद जेल की स्थिति वापस करें।

तो अगर इनपुट इस तरह है:[0,1,0,1,1,0,0,1], और एन =7, तो आउटपुट [0,0,1,1,0,0,0, 0]। तो यह निम्नलिखित के कारण है। सात दिनों के लिए -

Day 0: [0, 1, 0, 1, 1, 0, 0, 1]
Day 1: [0, 1, 1, 0, 0, 0, 0, 0]
Day 2: [0, 0, 0, 0, 1, 1, 1, 0]
Day 3: [0, 1, 1, 0, 0, 1, 0, 0]
Day 4: [0, 0, 0, 0, 0, 1, 0, 0]
Day 5: [0, 1, 1, 1, 0, 1, 0, 0]
Day 6: [0, 0, 1, 0, 1, 1, 0, 0]
Day 7: [0, 0, 1, 1, 0, 0, 0, 0]

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

  • एक नक्शा m बनाएं, और एक सेट बनाएं जिसे विज़िट किया गया कहा जाता है।

  • अगर N 0 है, तो सेल लौटाएं

  • देखे गए सेट में सेल डालें

  • मेरे लिए 1 से 14 की सीमा में

    • आकार 8 का अस्थायी नाम की एक सरणी बनाएं

    • j के लिए 1 से 6 की सीमा में

      • अगर सेल [जे -1] एक्सओआर सेल [जे + 1] =0, तो अस्थायी [जे]:=1

    • सेल :=अस्थायी

    • एम [i] :=अस्थायी

    • विज़िट किए गए में अस्थायी डालें

  • यदि N 14 से विभाज्य है, तो m[14] लौटाएं, अन्यथा m[N mod 14]

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<int> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
   public:
   vector<int> prisonAfterNDays(vector<int>& cells, int N) {
      map <int, vector <int> > m;
      if(N == 0) return cells;
      set <vector <int> > visited;
      visited.insert(cells);
      for(int i = 1; i<=14 ; i++ ){
         vector <int> temp(8);
         for(int j = 1; j < 7; j++){
            if(cells[j - 1] ^ cells[j + 1] == 0){
               temp[j] = 1;
            }
         }
         cells = temp;
         m[i] = temp;
         visited.insert(temp);
      }
      return m[N % 14 == 0? 14 : N % 14];
   }
};
main(){
   vector<int> v1 = {0,1,0,1,1,0,0,1};
   Solution ob;
   print_vector(ob.prisonAfterNDays(v1, 7));
}

इनपुट

[0,1,0,1,1,0,0,1]
7

आउटपुट

[0,0,1,1,0,0,0,0]

  1. C++ में N कटने के बाद वृत्त के टुकड़ों को गिनें

    हमें एक पूर्णांक N दिया गया है जो 2D-वृत्त पर लगाए गए कटों की संख्या को दर्शाता है। प्रत्येक वृत्त वृत्त को दो भागों में विभाजित करता है। लक्ष्य N कट के बाद वृत्त के टुकड़ों को खोजना है। टुकड़ों की संख्या =2 * नहीं। कटौती की आइए उदाहरणों से समझते हैं। इनपुट -एन=1 आउटपुट - सर्कल के टुकड़े:2 स्पष

  1. C++ में अधिकतम अवकाश दिवस

    मान लीजिए कि एक कंपनी अपने सबसे अच्छे कर्मचारियों में से एक को कुछ संसाधनों को इकट्ठा करने के लिए एन शहरों के बीच यात्रा करने का विकल्प देना चाहती है। लेकिन कर्मचारी कुछ छुट्टियां भी चाहते हैं, हम कुछ खास शहरों और हफ्तों में छुट्टियां ले सकते हैं। हमारा काम यात्रा को शेड्यूल करना है ताकि हम छुट्टी क

  1. C++ में T सेकंड के बाद मेंढक की स्थिति

    मान लीजिए कि हमारे पास एक अप्रत्यक्ष वृक्ष है जिसमें n शीर्ष हैं। शीर्षों की संख्या 1 से n तक है। अब एक मेंढक शीर्ष 1 से कूदना शुरू करता है। मेंढक एक सेकंड में अपने वर्तमान शीर्ष से दूसरे गैर-विजिट किए गए शीर्ष पर कूद सकता है यदि वे आसन्न हैं। मेंढक वापस देखे गए शीर्ष पर नहीं जा सकता। यदि मेंढक कई श