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

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

मान लीजिए कि हमारे पास एक मैट्रिक्स है, और एक लक्ष्य मूल्य है, हमें गैर-रिक्त सबमैट्रिसेस की संख्या का पता लगाना है जो योग लक्ष्य के समान है। यहां एक सबमैट्रिक्स [(x1, y1), (x2, y2)] सभी सेल मैट्रिक्स [x] [y] का सेट है, जिसमें x रेंज x1 और x2 और y रेंज y1 और y2 में है। दो सबमैट्रिस [(x1, y1), (x2, y2)] और [(x1', y1'), (x2', y2')] अलग हैं यदि उनके पास कुछ निर्देशांक हैं जो अलग हैं:जैसे, यदि x1 नहीं है X1' के समान।

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

0 1 0
1 1 1
0 1 0

और लक्ष्य =0, तो आउटपुट 4 होगा, ऐसा इसलिए है क्योंकि चार 1x1 सबमैट्रिस जिसमें केवल 0 होता है।

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

  • उत्तर:=0

  • col :=स्तंभों की संख्या

  • पंक्ति :=पंक्तियों की संख्या

  • इनिशियलाइज़ करने के लिए:=0, जब मैं <पंक्ति, अपडेट (i 1 से बढ़ाएँ), करें -

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

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

  • एक नक्शा परिभाषित करें मी

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

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

      • नक्शा साफ़ करें मी

      • मी[0] :=1

      • योग :=0

    • k :=0 को इनिशियलाइज़ करने के लिए, जब k <रो, अपडेट (k को 1 से बढ़ाएँ), करें -

      • वर्तमान:=मैट्रिक्स [के, जे]

      • अगर मैं - 1>=0, तो -

        • करंट:=करंट - मैट्रिक्स [k, i - 1]

      • योग :=योग + वर्तमान

      • उत्तर:=उत्तर + एम [लक्ष्य - योग]

      • m[-sum] को 1 से बढ़ाएं

  • वापसी उत्तर

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int numSubmatrixSumTarget(vector<vector<int>>& matrix, int
   target) {
      int ans = 0;
      int col = matrix[0].size();
      int row = matrix.size();
      for(int i = 0; i < row; i++){
         for(int j = 1; j < col; j++){
            matrix[i][j] += matrix[i][j - 1];
         }
      }
      unordered_map <int, int> m;
      for(int i = 0; i < col; i++){
         for(int j = i; j < col; j++){
            m.clear();
            m[0] = 1;
            int sum = 0;
            for(int k = 0; k < row; k++){
               int current = matrix[k][j];
               if(i - 1 >= 0)current -= matrix[k][i - 1];
               sum += current;
               ans += m[target - sum];
               m[-sum]++;
            }
         }
      }
      return ans;
   }
};
main(){
   Solution ob;
   vector<vector<int>> v = {{0,1,0},{1,1,1},{0,1,0}};
   cout << (ob.numSubmatrixSumTarget(v, 0));
}

इनपुट

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

आउटपुट

4

  1. C++ में फाइबोनैचि संख्याओं के वर्गों का योग

    F0=0, F1=1 और Fn=Fn-1+Fn-2, F2=F0+F1 F2=0+1 F2=1 फिर जब हम नंबर 1 और 1 जोड़ते हैं तो अगला नंबर 2 होगा F1=1, F2=1 और Fn=Fn-1+Fn-2, F3=F1+F2 F3=1+1 F3=2 फाइबोनैचि अनुक्रम 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, … है हमें ईंधन ऊर्जा श्रृंखला का वर्ग ज्ञात करना है और फिर हमें उसका योग करना है और परिणाम खो

  1. सी ++ में विभाज्य अनुक्रम

    विभाज्य अनुक्रम संख्याओं का एक विशेष क्रम है। अनुक्रम संख्या से ही शुरू होता है और अनुक्रम की अगली संख्या पिछले पदों के उचित भाजक का योग है। आइए अवधारणा को बेहतर ढंग से सीखने के लिए अनुक्रम का एक उदाहरण लेते हैं - Input : 8 Output : 8 7 1 0 Explanation :    Proper divisors of 8 are 4, 2,

  1. किसी सरणी में न्यूनतम संख्या जोड़ें ताकि योग C++ में भी हो जाए?

    मान लीजिए कि कुछ संख्याओं के साथ एक सरणी है। हमें कम से कम यह बताना होगा कि तत्वों के योग को सम बनाने के लिए इसमें कितनी संख्याएँ जोड़ी जाएँगी। संख्या 0 से अधिक होनी चाहिए। इसलिए यदि तत्वों का योग विषम है, तो हम 1 जोड़ देंगे, लेकिन यदि योग पहले से ही सम है, तो हम इसे सम बनाने के लिए इसमें 2 जोड़ दें