比赛 2022级DP专题练习赛1 评测结果 AAAAAAAAAA
题目名称 棋盘制作 最终得分 100
用户昵称 nick 运行时间 1.963 s
代码语言 C++ 内存使用 46.95 MiB
提交时间 2023-02-10 20:23:14
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=2005;
int up[N][N],l[N][N],r[N][N],ansa,ansb,a[N][N],m,n;
int main()
{
	freopen("makechess.in","r",stdin);
	freopen("makechess.out","w",stdout);
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            up[i][j]=1;
			l[i][j]=j;
			r[i][j]=j;
			cin>>a[i][j];
		}
    for(int i=1;i<=n;i++)
        for(int j=2;j<=m;j++)
            if(a[i][j]^a[i][j-1])
                l[i][j]=l[i][j-1];
    for(int i=1;i<=n;i++)
        for(int j=m;j>1;j--)
            if(a[i][j]^a[i][j-1])
                r[i][j-1]=r[i][j];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
		{
            if(i>1&&a[i][j]^a[i-1][j])
            {
                up[i][j]=up[i-1][j]+1;
				l[i][j]=max(l[i][j],l[i-1][j]);
				r[i][j]=min(r[i][j],r[i-1][j]);
			}
            int al=r[i][j]-l[i][j]+1;
            int bl=min(al,up[i][j]);
            ansa=max(ansa,bl*bl);
            ansb=max(ansb,al*up[i][j]);
        }
    cout<<ansa<<endl<<ansb<<endl;
    return 0;
}