ধরুন আমাদের একটি 2d বাইনারি ম্যাট্রিক্স আছে, আমাদের 1 সেকেন্ড সহ মোট সাবমেট্রিস সংখ্যা বের করতে হবে।
সুতরাং, যদি ইনপুট মত হয়
| 1 | 1 | ৷0 |
| 1 | 1 | ৷0 |
| 0 | 0 | 1 | ৷
তাহলে আউটপুট হবে 10, কারণ পাঁচটি 1 x 1 ম্যাট্রিক্স, দুটি 2 x 1 ম্যাট্রিক্স। দুটি 1 x 2 ম্যাট্রিক্স। এবং একটি 2 x 2 ম্যাট্রিক্স।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি ফাংশন getAns() সংজ্ঞায়িত করুন, এটি একটি অ্যারে নেবে,
-
ret :=0
-
n :=a
এর আকার -
n
আকারের একটি অ্যারে v সংজ্ঞায়িত করুন -
একটি স্ট্যাক স্ট্যাক সংজ্ঞায়িত করুন
-
আরম্ভ করার জন্য i :=0, যখন i
-
যখন (st খালি নয় এবং a[st-এর উপরের উপাদান]>=a[i]), করবেন −
-
st
থেকে পপ
-
-
যদি st খালি না হয়, তাহলে −
-
পূর্ববর্তী :=st
এর শীর্ষ উপাদান -
v[i] :=v[i] + v[পূর্বের]
-
v[i] :=v[i] + a[i] * (i - prev)
-
-
অন্যথায়
-
v[i] :=v[i] + a[i] * (i + 1)
-
-
আমাকে st
-এ ঢোকান
-
-
v −
প্রতিটি i এর জন্য-
ret :=ret + i
-
-
রিটার্ন রিটার্ন
-
প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
-
ret :=0
-
n :=v
এর আকার -
m :=(যদি n অ-শূন্য হয়, তাহলে v[0] এর আকার, অন্যথায় 0)
-
m
আকারের একটি অ্যারের তাপমাত্রা সংজ্ঞায়িত করুন -
আরম্ভ করার জন্য i :=0, যখন i
-
j শুরু করার জন্য :=0, যখন j
করুন -
temp[j] :=(যদি v[i, j] অ-শূন্য হয়, তাহলে temp[j] + 1, অন্যথায় 0)
-
-
ret :=ret + 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