您的位置:首页 > 其它

建别墅

2015-07-05 12:12 218 查看
建别墅
Time Limit:10000MS Memory Limit:65536K

Case Time Limit:1000MS
Description
何老板买了一块面积为n*m的土地,他想在这块土地上建造一座别墅。按照中国传统四平八稳的思想,他希望这个别墅是正方形的。

但是,这块土地并非十全十美,上面有很多地方是不平坦的,以至于根本不能在上面盖一砖一瓦。

他希望找到一块最大的平坦的正方形土地来盖别墅。应该选哪一块土地呢?现在,你来告诉他吧。
Input
第一行为两个整数n,m(1<=n,m<=1000),接下来n行,每行m个数字,用空格隔开。0表示该块土地不平坦,1表示该块土地平坦。

Output
一个整数,最大正方形的边长。
Sample Input

4 4
0 1 1 1
1 1 1 0
0 1 1 0
1 1 0 1


Sample Output

2

#include <stdio.h>
bool a[1001][1001];
int f[1001][1001];
int min(int a, int b, int c)
{
if(a>b)	a=b;
if(a>c)	a=c;
return a;
}
inline void _read(int& d)
{
char t=getchar();bool f=false;
while(t<'0'||t>'9') {if(t=='-') f=true; t=getchar();}
for(d=0;t<='9'&&t>='0';t=getchar()) d=d*10+t-'0';
if(f) d=-d;
}
inline void _out(int d)
{
int o[30],top=1;
if(d==0){putchar('0');return ;}
if(d<0) {putchar('-');d=-d;}
while(d)
{
o[top++]=d%10;
d/=10;
}
for(--top;top;--top) putchar('0'+o[top]);
}
int main()
{
int i, j, n, m, t, ans=0;
_read(n), _read(m);
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
_read(t);
if(t)
{
a[i][j]=1;
f[i][j]=1+min(f[i][j-1], f[i-1][j], f[i-1][j-1]);
if(ans<f[i][j])	ans=f[i][j];
}
}
}
_out(ans);
return 0;
}


[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: