记录编号 |
246092 |
评测结果 |
AAAAAAAAAAAAA |
题目名称 |
[USACO Jan16]哞哞城堡 |
最终得分 |
100 |
用户昵称 |
Satoshi |
是否通过 |
通过 |
代码语言 |
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;
}