比赛 |
不准粘代码,必须自己写(HS除外) |
评测结果 |
AAAAAAAAAA |
题目名称 |
棋盘制作 |
最终得分 |
100 |
用户昵称 |
瑆の時間~無盡輪迴·林蔭 |
运行时间 |
1.638 s |
代码语言 |
C++ |
内存使用 |
74.75 MiB |
提交时间 |
2019-09-23 20:21:12 |
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,ans1,ans2;
int L[2001][2001],R[2001][2001],UP[2001][2001];
int val[2001][2001];
int main()
{
freopen("makechess.in","r",stdin);
freopen("makechess.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%d",&val[i][j]);
L[i][j]=j;
R[i][j]=j;
UP[i][j]=1;
}
}
for(int i=1;i<=n;i++)
{
for(int j=2;j<=m;j++)
{
if(val[i][j]!=val[i][j-1])
{
L[i][j]=L[i][j-1];
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=m-1;j>0;j--)
{
if(val[i][j]!=val[i][j+1])
{
R[i][j]=R[i][j+1];
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(i>1&&val[i][j]!=val[i-1][j])
{
L[i][j]=max(L[i][j],L[i-1][j]);
R[i][j]=min(R[i][j],R[i-1][j]);//
UP[i][j]=UP[i-1][j]+1;
}
int a=R[i][j]-L[i][j]+1;
int h=min(a,UP[i][j]);
ans1=max(ans1,h*h);
ans2=max(ans2,a*UP[i][j]);
}
}
printf("%d\n%d",ans1,ans2);
return 0;
}