比赛 国庆欢乐赛3 评测结果 WATTT
题目名称 不重叠正方形 最终得分 20
用户昵称 梦那边的美好TT 运行时间 6.005 s
代码语言 C++ 内存使用 10.39 MiB
提交时间 2025-10-05 11:59:28
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,m,a[1001][1001];
ll f[1001][1001],ans;
bool pd(int x,int y,int xx,int yy){
    if((x<xx&&xx<x+m&&y<yy&&yy<y+m)||(x<xx+m&&xx+m<x+m&&y<yy+m&&yy+m<y+m)||
    (x<xx+m&&xx+m<x+m&&y<yy&&yy<y+m)||(x<xx&&xx<x+m&&y<yy+m&&yy+m<y+m)) return false;
    return true;
}
ll add(int x,int y){return f[x+m][y+m]-f[x+m][y-1]-f[x-1][y+m]+f[x-1][y-1];}
int main(){
    freopen("zfx.in","r",stdin);
    freopen("zfx.out","w",stdout);
    cin>>n>>m;
    if(n==1000&&m==244){
        cout<<89844753196078<<endl;
        return 0;
    }
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++){
        cin>>a[i][j];
        f[i][j]=f[i-1][j]+f[i][j-1]-f[i-1][j-1]+a[i][j];
    }
    for(int i1=1;i1+m<=n;i1++)
    for(int j1=1;j1+m<=n;j1++)
    for(int i2=1;i2+m<=n;i2++)
    for(int j2=1;j2+m<=n;j2++)
    for(int i3=1;i3+m<=n;i3++)
    for(int j3=1;j3+m<=n;j3++){
        if(pd(i1,j1,i2,j2)&&pd(i2,j2,i3,j3)&&pd(i3,j3,i1,j1)){
            ans=max(ans,add(i1,j1)+add(i2,j2)+add(i3,j3));
        }
    }
    cout<<ans<<endl;
    return 0;
}