西南民族大学第十一届程序设计竞赛(同步赛)【金牌厨师HiLin与HJGG】预处理二维数组前缀和+二分
思路:预处理出二维数组前缀和,然后二分即可。 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define int long long 4 #define inf 0x3f3f3f3f3f 5 #define N 6666 6 int mp[N][N]; 7 int sum[N][N];//二维数组前缀和· 8 int n,k; 9 int check(int m){ 10 int f=0; 11 for(int i=m;i<=n;i++){ 12 for(int j=m;j<=n;j++){ 13 int temp=sum[i][j]-sum[i-m][j]-sum[i][j-m]+sum[i-m][j-m]; 14 if(temp>=k){ 15 f=1; 16 break; 17 } 18 } 19 if(f){ 20 break; 21 } 22 } 23 return f; 24 } 25 signed main(){ 26 cin>>n>>k; 27 for(int i=1;i<=n;i++) 28 for(int j=1;j<=n;j++) 29 scanf("%lld",&mp[i][j]); 30 for(int i=1;i<=n;i++){ 31 for(int j=1;j<=n;j++){ 32 sum