C++でKより大きくない長方形の最大合計
2D行列と整数kがあるとします。合計がkを超えないように、行列内の長方形の最大合計を見つける必要があります。したがって、入力が-
のような場合| 1 | 0 | 1 |
| 0 | -3 | 2 |
また、k =3の場合、マークされた長方形の合計は3であるため、出力は3になります。
これを解決するには、次の手順に従います-
- 関数maxSumSubmatrix()を定義します。これには、1つの2D配列行列とkが必要です。
- n:=行番号、m:=列番号
- ans:=-inf
- 初期化l:=0の場合、l
- サイズnの配列rowSumを定義します
- rを初期化する場合:=l、r
- iを初期化する場合:=0、i
- rowSum [i]:=rowSum [i] + matrix [i、r]
- ans:=ansの最大値と(currSum-it)
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int maxSumSubmatrix(vector<vector<int>>& matrix, int k) {
int n = matrix.size();
int m = matrix[0].size();
int ans = INT_MIN;
for(int l = 0; l < m; l++){
vector <int> rowSum(n);
for(int r = l; r < m; r++){
for(int i = 0; i < n; i++)rowSum[i] += matrix[i][r];
set < int > s;
s.insert(0);
int currSum = 0;
for(int i = 0; i < n; i++){
currSum += rowSum[i];
set <int> :: iterator it = s.lower_bound(currSum - k);
if(it != s.end()){
ans = max(ans, (currSum - *it));
}
s.insert(currSum);
}
}
}
return ans;
}
};
main(){
Solution ob;
vector<vector<int>> v = {{1,0,1},{0,-3,2}};
cout << (ob.maxSumSubmatrix(v, 3));
} 入力
[{1,0,1},{0,-3,2}]
3 出力
3
-
C++の長方形エリアII
(軸に沿った)長方形のリストがあるとします。ここで、各rectangle [i] ={x1、y1、x2、y2}です。ここで、(x1、y1)は左下隅のポイントであり、(x2、y2)は右上隅のポイントです。 i番目の長方形。 平面内のすべての長方形でカバーされる総面積を見つける必要があります。答えは非常に大きい可能性があるため、モジュロ10 ^ 9+7を使用できます。 したがって、入力が次のような場合 その場合、出力は6になります。 これを解決するには、次の手順に従います- m =10 ^ 9 + 7 関数add()を定義します。これには、a、b、が必要です。 r
-
C++でのライン上の最大ポイント
2D平面があるとします。同じ直線上にある点の最大数を見つける必要があります。したがって、ポイントが次のような場合- それから4つのポイントがあります これを解決するには、次の手順に従います- n:=ポイントの数、n <3の場合、nを返します ans:=2 1からn–1の範囲のiの場合 カウント:=0 インデックスiとi– 1から2つのポイントを取ります。これらは、p1、p2です。 p1ポイントとp2ポイントが同じ場合、 0からn–1の範囲のjの場合 points [j] .x=p1.xおよびpoints[j].y =p1.yの場合、