测试点2dev上输出There are * ships.,洛谷上输出Bad……救救孩子吧。46分代码
#include <cstdio>
int r, c;
char k[1010][1010];
bool u[1010][1010]={{0}};
bool ask(int x, int y)
{
int n, l;
bool s=0, h=0;
for(int i=x;;i++)
{
for(int j=y;;j++)
{
if(u[i][j]==1) return 0;
u[i][j]=1;
if((k[i][j]=='.'||k[i][j]=='\000')&&j==y) {s=1; goto g;}
if(k[i][j]=='.'||k[i][j]=='\000') break;
n=j;
}
if(i==x)
{
l=n;
}
else if(l!=n)
{
return 0;
}
g:
if(s)
{
for(int j=y+1;j<=l;j++)
{
if(k[i][j]=='#')
{
return 0;
}
}
return 1;
}
}
}
int main()
{
int sum=0;
scanf("%d%d", &r, &c);
for(int i=0;i<r;i++)
{
for(int j=0;j<=c;j++)
{
scanf("%c", &k[i][j]);
}
}
for(int i=0;i<r;i++)
{
for(int j=1;j<=c;j++)
{
if(k[i][j]=='#'&&u[i][j]==0)
{
if(ask(i, j))
{
sum++;
}
else
{
printf("Bad placement.");
return 0;
}
}
}
}
printf("There are %d ships.", sum);
return 0;
}