题解 CF263E Rhombus
idea 是偷网上的,那就算一下复杂度吧。
考虑转成切比雪夫,那么要加的区域就把一个斜 45 正方形转成了一个正方形(
算一下复杂度:
能懂这个正方形长什么样吧,能懂吧能懂吧。来张图,这能理解了吧。
#include<bits/stdc++.h>
using namespace std;
const int _=2005;
int n,m,k;
long long b[_][_],maxn;
int main(){
ios::sync_with_stdio(0); cin.tie(0);
cin>>n>>m>>k;
pair<int,int> ans={k,k};
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
cin>>b[i+j][i-j+m];//+m是因为有负数
for(int i=1;i<=n+m;++i)
for(int j=1;j<=n+m;++j)
b[i][j]+=b[i-1][j]+b[i][j-1]-b[i-1][j-1];
for(int i=k;i<=n-k+1;++i){
for(int j=k;j<=m-k+1;++j){
int x=i+j,y=i-j+m;
long long sum=0;
for(int z=0;z<k;++z) sum+=b[x+z][y+z]-b[x-z-1][y+z]-b[x+z][y-z-1]+b[x-z-1][y-z-1];//理解成一圈一圈加
if(maxn<sum) ans={i,j},maxn=sum;
}
}
cout<<ans.first<<" "<<ans.second;
return 0;
}
//O(74074074.41591052711)