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

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


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

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

चरण

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

एक मैप mp परिभाषित करें आकार 4 का एक ऐरे count परिभाषित करें। i := 0 से h-1 तक, करें: j := 0 से w-1 तक, करें: tp[mat[i, j]] बढ़ाएं tp के प्रत्येक मान val के लिए, करें: count[val का दूसरा मान mod 4] बढ़ाएं check := true यदि h mod 2, 0 के बराबर है और w mod 2, 0 के बराबर है, तो: यदि count[1] + count[2] + count[3] > 0, तो: check := false अन्यथा जब h mod 2, 1 के बराबर है और w mod 2, 1 के बराबर है, तो: यदि count[1] + count[3] > 1, तो: check := false अन्यथा जब count[2] > h / 2 + w / 2, तो: check := false अन्यथा यदि count[1] + count[3] > 0, तो: check := false अन्यथा जब h mod 2, 1 के बराबर है और count[2] > w / 2, तो: check := false अन्यथा जब w mod 2, 1 के बराबर है और count[2] > h / 2, तो: check := false 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++ प्रोग्राम दिए गए ग्राफ में ब्रिज एज की संख्या ज्ञात करने का C++ प्रोग्राम

    मान लीजिए n वर्टेक्स और m एज वाला एक अनभारित, निदेश रहित ग्राफ दिया गया है। ग्राफ में एक ब्रिज एज वह एज है जिसे हटाने से ग्राफ असंबद्ध हो जाता है। हमें दिए गए ग्राफ में ऐसी एज की संख्या ज्ञात करनी है। ग्राफ में समानांतर एज या सेल्फ-लूप नहीं हैं। उदाहरण के लिए, यदि इनपुट है n = 5, m = 6, edges = {{1

  1. - कार बेचकर अधिकतम लाभ प्राप्त करने का C++ प्रोग्राम

    मान लीजिए लाल और नीली कारों की माँग है। एक ऑटोमोबाइल कंपनी p लाल कारें और q नीली कारें अलग-अलग कीमतों पर बेचने का फैसला करती है। वर्तमान में कंपनी के पास a लाल कारें, b नीली कारें, और c रंगहीन कारें (अभी रंगी नहीं गई) स्टॉक में हैं। विभिन्न कारों के मूल्य सरणी A, B, और C में दिए गए हैं। कंपनी को एक

  1. ग्राफ से घटाए जा सकने वाले अधिकतम स्कोर की मात्रा ज्ञात करने का C++ प्रोग्राम ग्राफ से घटाए जा सकने वाले अधिकतम स्कोर की मात्रा ज्ञात करने का C++ प्रोग्राम

    मान लीजिए n वर्टेक्स और m एज वाला एक भारित, निदेश रहित ग्राफ दिया गया है। ग्राफ का स्कोर ग्राफ में सभी एज भारों का योग है। एज भार ऋणात्मक हो सकते हैं, और यदि उन्हें हटा दिया जाए तो ग्राफ का स्कोर बढ़ जाता है। हमें ग्राफ को संबद्ध रखते हुए एज हटाकर ग्राफ के स्कोर को न्यूनतम करना है। हमें घटाए जा सकन