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

C++ में फ़्लिप किया गया मैट्रिक्स प्रीक्वल


मान लीजिए कि हमारे पास एक बाइनरी मैट्रिक्स है। यदि हम एक पंक्ति को फ्लिप करते हैं और फिर एक कॉलम को फ्लिप करते हैं, तो हमें अधिकतम 1s प्राप्त करना होगा।

तो, अगर इनपुट पसंद है

1 0 1
0 1 0
1 0 0

तो आउटपुट 8

. होगा

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

  • n :=मैट्रिक्स में पंक्तियों का आकार

  • m :=मैट्रिक्स में कॉलम का आकार

  • रिट:=0

  • आकार n की एक सरणी पंक्ति को परिभाषित करें

  • आकार n के एक सरणी कोल को परिभाषित करें

  • कुल:=0

  • इनिशियलाइज़ i:=0 के लिए, जब i

    • इनिशियलाइज़ j :=0 के लिए, जब j

      • पंक्ति [i]:=पंक्ति [i] + मैट्रिक्स [i, j]

      • कर्नल [जे]:=कर्नल [जे] + मैट्रिक्स [i, जे]

      • कुल:=कुल + मैट्रिक्स [i, j]

  • इनिशियलाइज़ i:=0 के लिए, जब i

    • इनिशियलाइज़ j :=0 के लिए, जब j

      • कैंड:=कुल - पंक्ति [i] - col[j] + ((m - row[i]) + (n - col[j]))

      • अगर मैट्रिक्स [i, j] गैर-शून्य है, तो -

        • कैंड :=कैंड + 2

      • अन्यथा

        • कैंडी:=कैंडी - 2

      • रिट :=अधिकतम रिट और कैंडिडेट

  • वापसी रिट

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int solve(vector<vector<int>> &matrix) {
      int n = matrix.size();
      int m = matrix[0].size();
      int ret = 0;
      vector<int> row(n);
      vector<int> col(m);
      int total = 0;
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < m; j++) {
            row[i] += matrix[i][j];
            col[j] += matrix[i][j];
            total += matrix[i][j];
         }
      }
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < m; j++) {
            int cand = total - row[i] - col[j] + (m - row[i]) + (n -
            col[j]);
            if (matrix[i][j]) {
               cand += 2;
            }else {
               cand -= 2;
            }
            ret = max(ret, cand);
         }
      }
      return ret;
   }
};
main() {
   Solution ob;
   vector<vector<int>> v = {{1,0,1},{0,1,0},{1,0,0}};
   cout << (ob.solve(v));
}

इनपुट

{{1,0,1},{0,1,0},{1,0,0}}

आउटपुट

8

  1. C++ में मैट्रिक्स की पंक्ति-वार बनाम स्तंभ-वार ट्रैवर्सल

    एक मैट्रिक्स को दो तरह से ट्रेस किया जा सकता है। रो-माइस ट्रैवर्सल पहली पंक्ति से शुरू होकर दूसरी और इसी तरह अंतिम पंक्ति तक एक-एक करके प्रत्येक पंक्ति का दौरा करता है। पंक्ति में तत्वों को सूचकांक 0 से अंतिम सूचकांक में लौटाया जाता है। कॉलम-वार ट्रैवर्सल में, तत्वों को पहले कॉलम से अंतिम कॉलम तक क

  1. सी++ में सर्पिल मैट्रिक्स III

    मान लीजिए कि हमारे पास आर पंक्तियों और सी कॉलम के साथ एक 2 आयामी ग्रिड है, हम पूर्व की ओर (r0, c0) से शुरू करते हैं। यहां, ग्रिड का उत्तर-पश्चिम कोना पहली पंक्ति और स्तंभ पर है, और ग्रिड का दक्षिण-पूर्व कोना अंतिम पंक्ति और स्तंभ पर है। हम इस ग्रिड में हर स्थिति का दौरा करने के लिए एक दक्षिणावर्त सर

  1. सी ++ में एक बूलियन मैट्रिक्स प्रश्न?

    यहां हम एक दिलचस्प बूलियन मैट्रिक्स समस्या देखेंगे। एक बूलियन मैट्रिक्स दिया गया है जिसमें 0 और 1 है। हमारा लक्ष्य यह पता लगाना है कि 1 कहाँ अंकित है। यदि 1 को स्थिति mat[i,j] पर चिह्नित किया गया है, तो हम पंक्ति i और कॉलम j की 1 में सभी प्रविष्टियां करेंगे। आइए एक उदाहरण देखते हैं। यदि मैट्रिक्स नी