C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++ですべてのものを含む正方形の部分行列を数える


サイズがmxnのバイナリ行列を想定します。すべて1で、正方形の部分行列の数を数える必要があります。したがって、行列が-

のような場合
0 1 1 1
1 1 1 1
0 1 1 1

したがって、15個の正方形があります。単一のものの10の正方形、4つのものの4つの正方形、および9つのものの1つの正方形。

これを解決するには、次の手順に従います-

  • set ans:=0、n:=行数およびm:=列数
  • 0からm–1の範囲のiの場合
    • ans:=ans + matrix [n – 1、i]
  • 0からn–1の範囲のiの場合
    • ans:=ans + matrix [i、m – 1]
  • ans:=ans – matrix [n – 1、m-1]
  • n –2から0までの範囲のiの場合
    • m –2から0までの範囲のjの場合
      • matrix [i、j] =1の場合、
        • matrix [i、j]:=1 +最小値(matrix [i + 1、j + 1]、matrix [i、j + 1]、matrix [i + 1、j])
      • それ以外の場合、matrix [i、j]:=0
      • ans:=ans + matrix [i、j]
  • 回答を返す

理解を深めるために、次の実装を見てみましょう-

#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;
   }
};
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 ++でA%X=BとなるようなXのすべての可能な値のカウント

    2つの整数AとB、および数値Xが与えられます。目標は、A%X=BとなるようにXが持つことができる値の数を見つけることです。上記の式の場合、A ==Bの場合、Xの無限の値が可能であるため、-1を返します。 A Bの場合、結果として(AB)の約数の数を返します。 例 入力 A=5, B=2 出力 Count of all possible values of X such that A % X = B are: 1 説明 5%3=2. So X is 3 here. 入力 A=10, B=10 出力 Count of all possible values of X such that A

  2. C++でmが同一線上にある合計nポイントの三角形の数

    2D平面上の点の数を表す2つの変数nとmが与えられます。 n個のポイントのうち、m個のポイントは同一線上にあります。目標は、これらのn個の点を使用して形成できる三角形の数を見つけることです。 同一線上の点 −同じ線上にある点は同一線上にあると呼ばれます。ポイントAとBは同一線上にあります。 n =4(A、B、C、D)の場合、m =2(A、B) 三角形の数- 4から任意の3つのポイントを選択=4C 3 ただし、同一線上の点は三角形を形成できないため、上記でカウントされる可能性のある三角形を削除します=2C 3 三角形の合計=4C 3 --2C 3 =4-0 =4