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

सी ++ प्रोग्राम यह पता लगाने के लिए कि क्या किसी दिए गए मैट्रिक्स से पैलिंड्रोमिक मैट्रिक्स बनाया जा सकता है

मान लीजिए, हमें आयाम h x w के साथ एक मैट्रिक्स दिया गया है। मैट्रिक्स में अंग्रेजी अक्षर हैं। हमें एक और मैट्रिक्स बनाना होगा जिसमें पैलिंड्रोमिक रो और कॉलम होंगे, यानी प्रत्येक पंक्ति और कॉलम पैलिंड्रोम होंगे। ऐसा करने के लिए, दिए गए मैट्रिक्स से पंक्तियों और स्तंभों की कोई भी व्यवस्था की जा सकती है; लेकिन कोई तत्व नहीं बदला जा सकता है, यानी 'ए' को 'बी' में नहीं बदला जा सकता है। यदि दिए गए मैट्रिक्स से पैलिंड्रोमिक मैट्रिक्स बनाना संभव है, तो हम सही लौटते हैं; या अन्यथा, हम झूठी वापसी करते हैं।

इसलिए, यदि इनपुट h =4, w =4, mat ={"xxyy", "xyxx", "yxxy", "xyyy"} जैसा है, तो आउटपुट सही होगा।

कदम

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

Define one map mp
Define an array count of size 4.
for initialize i := 0, when i < h, update (increase i by 1), do:
   for initialize j := 0, when j < w, update (increase j by 1), do:
       (increase tp[mat[i, j]] by 1)
for each value val in tp, do:
   increase count[second value of val mod 4] by 1
check := true
if h mod 2 is same as 0 and w mod 2 is same as 0, then:
   if count[1] + count[2] + count[3] > 0, then:
      check := false
otherwise when h mod 2 is same as 1 and w mod 2 is same as 1, then:
   if count[1] + count[3] > 1, then:
      check := false
   otherwise when count[2] > h / 2 + w / 2, then:
      check := false
Otherwise
   if count[1] + count[3] > 0, then:
      check := false
   otherwise when h mod 2 is same as 1 and count[2] > w / 2, then:
      check := false
   otherwise when w mod 2 is same as 1 and count[2] > h / 2, then:
      check := false
return check

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;

bool solve(int h, int w, vector<string> mat){
   map<char, int> tp;
   vector<int> count(4);
   for (int i = 0; i < h; ++i) {
      for (int j = 0; j < w; ++j)
      tp[mat[i][j]]++;
   }
   for (auto val : tp)
       count[val.second % 4]++;
   bool check = true;
   if (h % 2 == 0 && w % 2 == 0) {
      if (count[1] + count[2] + count[3] > 0)
         check = false;
   }
   else if (h % 2 == 1 && w % 2 == 1) {
      if (count[1]+count[3] > 1)
         check = false;
      else if (count[2] > h / 2 + w / 2)
         check = false;
   } else {
      if (count[1] + count[3] > 0)
         check = false;
      else if (h % 2 == 1 && count[2] > w / 2)
         check = false;
      else if (w % 2 == 1 && count[2] > h / 2)
         check = false;
   }
   return check;
}
int main() {
   int h = 4, w = 4;
   vector<string> mat = {"xxyy", "xyxx", "yxxy", "xyyy"};
   cout<< solve(h, w, mat);
   return 0;
}

इनपुट

4, 4, {"xxyy", "xyxx", "yxxy", "xyyy"}

आउटपुट

1

  1. C++ प्रोग्राम दिए गए ग्राफ़ में ब्रिज किनारों की संख्या का पता लगाने के लिए

    मान लीजिए, हमें एक अभारित, अप्रत्यक्ष ग्राफ दिया गया है जिसमें n कोने और m किनारे हैं। ग्राफ़ में ब्रिज का किनारा वह किनारा होता है जिसके हटाने से ग्राफ़ डिस्कनेक्ट हो जाता है। हमें दिए गए आलेख में ऐसे आलेखों की संख्या ज्ञात करनी है। ग्राफ़ में समानांतर किनारे या सेल्फ़-लूप नहीं होते हैं। इसलिए, यद

  1. C++ प्रोग्राम कारों को बेचने से होने वाली अधिकतम राशि का पता लगाने के लिए

    मान लीजिए, बिक्री के लिए लाल और नीली कारों की मांग है। एक ऑटोमोबाइल कंपनी p लाल कारों और q नीली कारों को अलग-अलग कीमतों पर बेचने का फैसला करती है। वर्तमान में, कंपनी के पास लाल कारों की संख्या ए, नीली कारों की बी संख्या और रंगहीन कारों की सी संख्या (कारें अभी पेंट की जानी बाकी हैं) उनके स्टॉक में है

  1. C++ प्रोग्राम स्कोर की अधिकतम राशि का पता लगाने के लिए जिसे ग्राफ़ से घटाया जा सकता है

    मान लीजिए, एक भारित, अप्रत्यक्ष ग्राफ है जिसमें n कोने और m किनारे हैं। ग्राफ़ के स्कोर को ग्राफ़ में सभी किनारों के वज़न के योग के रूप में परिभाषित किया गया है। किनारे के वजन नकारात्मक हो सकते हैं, और यदि उन्हें हटा दिया जाता है तो ग्राफ का स्कोर बढ़ जाता है। हमें क्या करना है, हमें ग्राफ को कनेक्ट