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

C++ में सभी 1 वाले वर्गाकार उपमैट्रिक्स की गणना


मान लीजिए हमारे पास आकार m x n की एक बाइनरी मैट्रिक्स है। हमें सभी 1 वाले वर्गाकार उपमैट्रिक्स की संख्या गिननी है। इसलिए यदि मैट्रिक्स इस तरह है:

0111
1111
0111

तो 15 वर्ग होंगे। एकल 1 के 10 वर्ग, चार 1 के 4 वर्ग, और नौ 1 का 1 वर्ग।

हल का दृष्टिकोण

इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:

  • ans := 0, n := पंक्ति गिनती, m := स्तंभ गिनती सेट करें
  • i = 0 से m-1 तक:
    • ans := ans + matrix[n-1][i]
  • i = 0 से n-1 तक:
    • ans := ans + matrix[i][m-1]
  • ans := ans - matrix[n-1][m-1]
  • i = n-2 से 0 तक नीचे:
    • j = m-2 से 0 तक नीचे:
      • यदि matrix[i][j] == 1, तो:
        • matrix[i][j] := 1 + min(matrix[i+1][j+1], matrix[i][j+1], matrix[i+1][j]) का न्यूनतम
      • अन्यथा matrix[i][j] := 0
      • ans := ans + matrix[i][j]
  • ans लौटाएं

उदाहरण

#include <bits/stdc++.h> 
using namespace std; 

class Solution { 
public: 
    int countSquares(vector<vector<int>>& matrix) { 
        int ans = 0; 
        int n = matrix.size(); 
        int m = matrix[0].size(); 
        for(int i = 0; i < m; i++) ans += matrix[n-1][i]; 
        for(int i = 0; i < n; i++) ans += matrix[i][m-1]; 
        ans -= matrix[n-1][m-1]; 
        for(int i = n - 2; i >= 0; i--){ 
            for(int j = m - 2; j >= 0; j--){ 
                matrix[i][j] = matrix[i][j] == 1 ? 1 + min({matrix[i+1][j+1], matrix[i][j+1], matrix[i+1][j]}) : 0; 
                ans += matrix[i][j]; 
            } 
        } 
        return ans; 
    } 
}; 

int main(){ 
    vector<vector<int>> v = {{0,1,1,1},{1,1,1,1},{0,1,1,1}}; 
    Solution ob; 
    cout << (ob.countSquares(v)); 
}

इनपुट

[[0,1,1,1], [1,1,1,1], [0,1,1,1]]

आउटपुट

15

  1. - C++ में सभी समान तत्वों वाले अधिकतम वर्ग उप-मैट्रिक्स खोजना

    समस्या विवरण इस समस्या में, हमें एक N×N मैट्रिक्स mat[][] दिया गया है। हमारा कार्य सभी समान तत्वों वाले अधिकतम वर्ग उप-मैट्रिक्स को खोजना है। इस समस्या में, हमें दिए गए मैट्रिक्स से अधिकतम आकार के उप-मैट्रिक्स को खोजने की आवश्यकता है जिसके सभी तत्व समान हों। उदाहरण इनपुट: mat[][] = {{1, 2, 1},

  1. - C++ में A % X = B को संतुष्ट करने वाले X के संभावित मानों की गिनती

    समस्या विवरण दो पूर्णांक A और B और एक संख्या X दिए गए हैं। लक्ष्य उन मानों की संख्या ज्ञात करना है जो X ले सकता है ताकि A % X = B। उपरोक्त समीकरण के लिए यदि A == B तो X के अनंत मान संभव हैं, इसलिए -1 लौटाएं। यदि A < B तो कोई हल नहीं होगा इसलिए 0 लौटाएं। यदि A > B तो (A-B) के भाजकों की संख्या

  1. C++ में कुल n बिंदुओं और m संरेखीय बिंदुओं वाले त्रिभुजों की गिनती C++ में कुल n बिंदुओं और m संरेखीय बिंदुओं वाले त्रिभुजों की गिनती

    हमें दो चर n और m दिए गए हैं जो 2D तल पर बिंदुओं की संख्या दर्शाते हैं। n बिंदुओं में से, m बिंदु संरेखीय (collinear) हैं। लक्ष्य इन n बिंदुओं का उपयोग करके बनने वाले त्रिभुजों की संख्या ढूंढना है। संरेखीय बिंदु (Collinear points) - वे बिंदु जो एक ही रेखा पर होते हैं उन्हें संरेखीय कहा जाता है। बि