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

C++ प्रोग्राम यह जांचने के लिए कि अक्षरों के दो ढेर खाली किए जा सकते हैं या नहीं

मान लीजिए, 2n अक्षरों की संख्या है और उनमें से प्रत्येक पर 1 से n के बीच एक पूर्णांक संख्या लिखी गई है। ठीक दो अक्षर ऐसे होते हैं जिन पर समान संख्या लिखी होती है। इन अक्षरों को m स्टैक्स में व्यवस्थित किया गया है और स्टैक i पर अक्षर स्टैक [i] हैं। हमारा काम सभी स्टैक को निम्नलिखित तरीके से खाली करना है

  • हमें किन्हीं दो स्टैक्स को चुनना है और उन दोनों में से ऊपर के अक्षर को हटाना है।

  • हमने जो अक्षर निकाले हैं, उन दोनों पर एक ही नंबर होना चाहिए।

अगर हम इस तरह से एम स्टैक खाली कर सकते हैं, तो हम सही प्रिंट करते हैं या अन्यथा हम झूठी वापसी करते हैं।

इसलिए, यदि इनपुट n =3, m =2, स्टैक्स ={{2, 1, 3}, {2, 1, 3}} जैसा है, तो आउटपुट सही होगा।

दो ढेर हैं और प्रत्येक ढेर में अक्षर हैं जिन पर क्रमशः संख्या 2, 1, 3 लिखी गई है। तो, हम दो स्टैक से हटा सकते हैं और उन्हें दिए गए तरीके से खाली कर सकते हैं।

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

Define one 2D array dp
Define an array tvec
for initialize i := 0, when i < m, update (increase i by 1), do:
   k := size of stacks[i]
   for initialize j := 0, when j < k, update (increase j by 1), do:
      if j < 0, then:
         insert p at the end of dp[stacks[i, j]]
         (increase tvec[p] by 1)
      p := stacks[i, j]
Define an array tp
for initialize i := 1, when i <= n, update (increase i by 1), do:
   Define one queue q
   insert i into q
   while (q is not empty), do:
    if not tp[first element of q] and tvec[first element of q] is same as 0, then:
         for each element next in dp[first element of q], do:
             (decrease tvec[next] by 1)
             insert next into q
         tp[first element of q] := true
   delete first element from q
for initialize i := 1, when i <= n, update (increase i by 1), do:
   if tvec[i] is not equal to 0, then:
return false
return true

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;

bool solve(int n, int m, vector<vector<int>> stacks){
   vector<vector<int>> dp(n + 1);
   vector<int> tvec(n + 1);
   for(int i = 0; i < m; i++){
      int k = stacks[i].size();
      int p;
      for(int j = 0; j < k; j++){
         if(j > 0){
            dp[stacks[i][j]].push_back(p);
            tvec[p]++;
         }
         p = stacks[i][j];
      }
   }
   vector<bool> tp(n + 1);
   for(int i = 1; i <= n; i++){
      queue<int> q;
      q.push(i);
      while(!q.empty()){
         if(!tp[q.front()] && tvec[q.front()] == 0){
            for(auto next: dp[q.front()]){
               tvec[next]--;
               q.push(next);
            }
            tp[q.front()]=true;
         }
         q.pop();
      }
   }
   for(int i = 1; i <= n; i++){
      if(tvec[i] != 0){
         return false;
      }
   }
   return true;
}
int main() {
   int n = 3, m = 2;
   vector<vector<int>> stacks = {{2, 1, 3}, {2, 1, 3}};
   cout<< solve(n, m, stacks);
   return 0;
}

इनपुट

3, 2, {{2, 1, 3}, {2, 1, 3}}

आउटपुट

1

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

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

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

    एक अभाज्य संख्या एक पूर्ण संख्या होती है जो एक से बड़ी होती है और एक अभाज्य संख्या का एकमात्र गुणनखंड एक और स्वयं होना चाहिए। कुछ पहली अभाज्य संख्याएँ हैं - 2, 3, 5, 7, 11, 13 ,17 कोई संख्या अभाज्य है या नहीं यह जाँचने का कार्यक्रम इस प्रकार है। उदाहरण #include <iostream> using namespace std;

  1. पायथन में वर्णों की अदला-बदली करके दो तारों की जाँच करने का कार्यक्रम समान हो सकता है

    मान लीजिए कि हमारे पास दो लोअरकेस स्ट्रिंग्स s और t हैं, वे समान लंबाई के हैं। हम एक अक्षर को s से और दूसरे को t से चुन सकते हैं और उन्हें स्वैप कर सकते हैं। हम इस ऑपरेशन को जितनी बार चाहें उतनी बार कर सकते हैं। अंत में, हमें यह जांचना होगा कि क्या दो तारों को समान बनाना संभव है या नहीं। इसलिए, यदि