मान लीजिए कि हमारे पास 2d बाइनरी मैट्रिक्स है, हमें सभी 1 s के साथ सबमैट्रिस की कुल संख्या ज्ञात करनी है।
तो, अगर इनपुट पसंद है
1 | 1 | 0 |
1 | 1 | 0 |
0 | 0 | 1 |
तो आउटपुट 10 होगा, क्योंकि वहां पांच 1 x 1 मैट्रिक्स, दो 2 x 1 मैट्रिक्स है। दो 1 x 2 मैट्रिक्स। और एक 2 x 2 मैट्रिक्स।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक फ़ंक्शन को परिभाषित करें getAns (), यह एक सरणी लेगा,
-
रिट:=0
-
n :=आकार का
-
n आकार की एक सरणी v परिभाषित करें
-
एक स्टैक सेंट परिभाषित करें
-
इनिशियलाइज़ i :=0 के लिए, जब i
-
जबकि (सेंट खाली नहीं है और एक [सेंट का शीर्ष तत्व]> =एक [i]), करते हैं -
-
सेंट से पॉप
-
-
अगर सेंट खाली नहीं है, तो -
-
पिछला:=सेंट का शीर्ष तत्व
-
v[i] :=v[i] + v[पिछला]
-
v[i] :=v[i] + a[i] * (i - पिछला)
-
-
अन्यथा
-
v[i] :=v[i] + a[i] * (i + 1)
-
-
मुझे सेंट में डालें
-
-
v -
. में प्रत्येक i के लिए-
रिट:=रिट + आई
-
-
वापसी रिट
-
मुख्य विधि से निम्न कार्य करें -
-
रिट:=0
-
n:=वी का आकार
-
m :=(यदि n शून्य नहीं है, तो v[0] का आकार, अन्यथा 0)
-
आकार की एक सरणी अस्थायी परिभाषित करें m
-
इनिशियलाइज़ i :=0 के लिए, जब i
-
इनिशियलाइज़ j :=0 के लिए, जब j
-
temp[j] :=(यदि v[i, j] शून्य नहीं है, तो temp[j] + 1, अन्यथा 0)
-
-
रिट:=रिट + getAns(temp)
-
-
वापसी रिट
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; class Solution { public: int getAns(vector& a) { int ret = 0; int n = a.size(); vector<int> v(n); stack<int> st; for (int i = 0; i < a.size(); i++) { while (!st.empty() && a[st.top()] >= a[i]) st.pop(); if(!st.empty()) { int prev = st.top(); v[i] += v[prev]; v[i] += a[i] * (i - prev); } else{ v[i] += a[i] * (i + 1); } st.push(i); } for (int i : v) { ret += i; } return ret; } int solve(vector<vector<int>>& v) { int ret = 0; int n = v.size(); int m = n ? v[0].size() : 0; vector<int> temp(m); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { temp[j] = v[i][j] ? temp[j] + 1 : 0; } ret += getAns(temp); } return ret; } }; int solve(vector<vector<int>>& matrix) { return (new Solution())->solve(matrix); } main(){ vector<vector> matrix = { {1, 1, 0}, {1, 1, 0}, {0, 0, 1} }; cout << solve(matrix); }
इनपुट
{{1, 1, 0},{1, 1, 0},{0, 0, 1}};
आउटपुट
10