西南民族大学

西南民族大学第十一届程序设计竞赛(同步赛)【金牌厨师HiLin与HJGG】预处理二维数组前缀和+二分

我怕爱的太早我们不能终老 提交于 2020-01-10 11:28:55
思路:预处理出二维数组前缀和,然后二分即可。 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

西南民族大学第十一届程序设计竞赛(同步赛)-L 金牌厨师HiLin与HJGG

烈酒焚心 提交于 2019-12-29 21:36:34
地址: https://ac.nowcoder.com/acm/contest/3570/L 思路:二维前缀和+二分查找,首先预处理出前a[i][j]的和,在利用二分查找答案即可 Code: #include<iostream> #include<algorithm> using namespace std; typedef pair<double,double> pr; typedef long long LL; const int MAX_N=2e3+5; int n,m,T; LL a[MAX_N][MAX_N]; bool judge(int k){ LL Max=0; for(int i=k;i<=n;++i) for(int j=k;j<=n;++j) Max=max(Max,a[i][j]-a[i-k][j]-a[i][j-k]+a[i-k][j-k]); return (Max>=m); } int main() { ios::sync_with_stdio(false); cin>>n>>m; for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) { cin>>a[i][j]; a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1]; } int res=0; int l=1,r=n,h; if(a[n]