কম্পিউটার

C++ এ প্রদত্ত ম্যাট্রিক্সে 1s এর বর্গাকার সাবম্যাটিক্সের সংখ্যা গণনা করার প্রোগ্রাম


ধরুন আমাদের একটি 2d ​​বাইনারি ম্যাট্রিক্স আছে, আমাদের 1 সেকেন্ড সহ মোট সাবমেট্রিস সংখ্যা বের করতে হবে।

সুতরাং, যদি ইনপুট মত হয়

৷ ৷ ৷
1 10
1 10
0 0 1

তাহলে আউটপুট হবে 10, কারণ পাঁচটি 1 x 1 ম্যাট্রিক্স, দুটি 2 x 1 ম্যাট্রিক্স। দুটি 1 x 2 ম্যাট্রিক্স। এবং একটি 2 x 2 ম্যাট্রিক্স।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

#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

  1. একটি প্রদত্ত গ্রাফে সেতুর প্রান্তের সংখ্যা খুঁজে বের করার জন্য C++ প্রোগ্রাম

  2. C++ এ বাইনারি ম্যাট্রিক্সকে শূন্য ম্যাট্রিক্সে রূপান্তর করতে অপারেশনের সংখ্যা গণনা করার প্রোগ্রাম

  3. একটি প্রদত্ত সংখ্যার সংখ্যা যোগ করার জন্য C++ প্রোগ্রাম

  4. পাইথনে প্রদত্ত বাইনারি ম্যাট্রিক্সে বর্গ সাবম্যাট্রিসের সংখ্যা গণনা করার প্রোগ্রাম