比赛 不准粘代码,必须自己写(HS除外) 评测结果 AAAAAAAAAA
题目名称 棋盘制作 最终得分 100
用户昵称 ShallowDream雨梨 运行时间 2.607 s
代码语言 C++ 内存使用 63.50 MiB
提交时间 2019-10-24 21:59:17
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int maxn=2005;
bool a[maxn][maxn];
int l[maxn][maxn],r[maxn][maxn],up[maxn][maxn];
	int m,n,ans1,ans2;
int main(){
	freopen("makechess.in","r",stdin);
	  freopen("makechess.out","w",stdout);
	//ios::sync_with_stdio(false);
 
	cin>>m>>n;
	for(int i=1;i<=m;i++)
	for(int j=1;j<=n;j++){
	cin>>a[i][j];
	l[i][j]=j;
	r[i][j]=j;
	up[i][j]=1;	}
	for(int i=1;i<=m;i++)
	for(int j=2;j<=n;j++)
	if(a[i][j]!=a[i][j-1])
	l[i][j]=l[i][j-1];
	
	for(int i=1;i<=m;i++)
	for(int j=n;j>=2;j--)
	if(a[i][j]!=a[i][j-1])
	r[i][j-1]=r[i][j];
	
	for(int i=1;i<=m;i++)
	for(int j=1;j<=n;j++){
	if(a[i][j]!=a[i-1][j]&&i>=2){
		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 q=r[i][j]-l[i][j]+1;
	int w=min(q,up[i][j]);
	ans1=max(ans1,w*w);
	ans2=max(ans2,up[i][j]*q);
	}
	cout<<ans1;
	cout<<endl;
	cout<<ans2;
	return 0;
}