#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n,m;
char maps[1005][1005];
int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i=1; i<=n; i++)
{
scanf("%s",maps[i]+1);
}
int ans=-1;
int temp=min(n,m);
if(temp%2==0) temp--;
for(int i=temp; i>1; i=i-2)
{
int mid=i/2+1;
int ui=i/2;
for(int j=mid; j+ui<=n; j++)
{
for(int k=mid; k+ui<=m; k++)
{
if(maps[j][k]=='*')
{
//printf("%d\n",i);
for(int l=1; l<=ui; l++)
{
if(maps[j-l][k-l]=='*'&&maps[j-l][k+l]=='*'&&maps[j+l][k-l]=='*'&&maps[j+l][k+l]=='*')
{
if(l==ui)
{
ans=i;
goto key;
}
}
else break;
}
}
}
}
}
key: printf("%d\n",ans);
}
}
1419: 最大的XⅡ
Time Limit: 3 Sec Memory Limit: 32 MBSubmit: 32 Solved: 11
[ Submit][ Status][ Web Board]
Description
zjw在纸上画了很多点,发现点可以构成X,zjw想找到最大长度的X。
为了简化问题,’*’代表画的点,’-’代表空白。例如:
里面有一个长度为3的X和长度为5的X,最大的为5。
Input
多组数据处理到文件末。
第一行两个整数n和m(1<=n<=1000, 1<=m<=1000),接下来n行,每行m个字符,字符只包含’-’和’*’,’*’代表画的点,’-’代表空白。
Output
在一行中输出结果X的最大长度,如果不存在X输出 -1。
Sample Input
3 3
*-*
-*-
*-*
3 3
*-*
---
*-*
Sample Output
3
-1