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

C++ में N दिनों के बाद प्रिजन सेल्स (Prison Cells After N Days)


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

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

  • अन्यथा, यह खाली हो जाता है।

हम प्रिजन की वर्तमान स्थिति को इस तरह वर्णित करेंगे: cells[i] 1 होगा यदि i-वीं सेल कब्जे वाली है, अन्यथा 0।

हमें प्रिजन की प्रारंभिक स्थिति दी गई है, फिर N दिनों के बाद प्रिजन की स्थिति लौटानी है।

उदाहरण के लिए, यदि इनपुट [0,1,0,1,1,0,0,1] है और N = 7, तो आउटपुट [0,0,1,1,0,0,0,0] होगा।

समाधान दृष्टिकोण

  1. एक मैप m और एक विजिटेड सेट बनाएं

  2. यदि N=0 तो cells लौटाएं

  3. 14 दिनों तक सिमुलेशन चलाएं (चक्र 14 दिनों का होता है)

  4. प्रत्येक दिन के लिए नया स्टेट temp बनाएं

  5. j=1 से 6 तक: यदि cells[j-1] XOR cells[j+1] == 0 तो temp[j] = 1

  6. N % 14 के आधार पर परिणाम लौटाएं (0 होने पर 14वां दिन)

C++ कार्यान्वयन

#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]; 
    } 
}; 

int main(){ 
    vector<int> v1 = {0,1,0,1,1,0,0,1}; 
    Solution ob; 
    print_vector(ob.prisonAfterNDays(v1, 7)); 
    return 0; 
}

इनपुट

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

आउटपुट

[0,0,1,1,0,0,0,0]
  1. N कट के बाद वृत्त के टुकड़ों की संख्या गिनें C++ में N कट के बाद वृत्त के टुकड़ों की संख्या गिनें C++ में

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

  1. - C++ में अधिकतम छुट्टी दिन

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

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

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