记录编号 246092 评测结果 AAAAAAAAAAAAA
题目名称 [USACO Jan16]哞哞城堡 最终得分 100
用户昵称 GravatarSatoshi 是否通过 通过
代码语言 C++ 运行时间 0.374 s
提交时间 2016-04-05 07:52:48 内存使用 0.82 MiB
显示代码纯文本
#include <fstream>
#include <algorithm>
#define N 210
using namespace std;
ifstream in("fortmoo.in");
ofstream out("fortmoo.out");
int a[N][N]={0};
int sum[N][N]={0};
int s[N][N]={0};
int n,m;
int ans=0;

int count(int x1,int y1,int x2,int y2)
{
	x1--;y1--;
	return s[x1][y1]+s[x2][y2]-s[x1][y2]-s[x2][y1];
	
}
void read()
{
	int i,j;
	char x;
	in>>n>>m;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			in>>x;
			if(x=='X')a[i][j]++;
		}
	}
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			sum[i][j]=sum[i-1][j]+a[i][j];
		}
	}
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			s[i][j]=s[i][j-1]+sum[i][j];
		}
	}
}
int slide(int l,int r)
{
	int i,j,L,R,realR;
	int x1,x2,x3,x4,best=0,temp;
	R=1;
	for(L=1;L<=m;L++)
	{
		x1=count(l,L,r,L);
		if(x1)continue;
		R=max(L,R);
		realR=max(L,realR);
		while(R<=m)
		{
			x2=count(l,L,l,R);
			x3=count(r,L,r,R);
			x4=count(l,R,r,R);
			if(x2||x3)break;
			if(!x4)realR=R;
			R++;
		}
		R--;
		best=max(best,(realR-L+1)*(r-l+1));
	}
	return best;
}
void work()
{
	int i,j;
	for(i=1;i<=n;i++)
	{
		for(j=i;j<=n;j++)
		{
			ans=max(ans,slide(i,j));
		}
	}
	out<<ans<<endl;
}
int main()
{
	read();
	work();
	return 0;
}