Day 2 前缀和(水)
代码如下(示例):
#include <bits/stdc++.h>
using namespace std;
int a[1005][1005];//每行的前缀和
int num[1005][1005];//二维前缀和
int Maxn=-516561516;
int main(){
int N,M,C,k;
int nx,ny;
cin>>N>>M>>C;
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++){
cin>>k;
a[i][j]=a[i][j-1]+k;//行前缀和
num[i][j]=num[i-1][j]+a[i][j-1]+k;//二维前缀和
//预处理
}
for(int i=1;i<=N-C+1;i++)//左上角顶点
for(int j=1;j<=M-C+1;j++){
int q=Maxn;
Maxn=max(Maxn,num[i+C-1][j+C-1]-num[i-1][j+C-1]-num[i+C-1][j-1]+num[i-1][j-1]);
if(q!=Maxn){//如果最大值发生了变化
nx=i,ny=j;
}
}
cout<<nx<<" "<<ny;
return 0;
}