wa了N多遍。。。
开始的时候是模拟老将走的四个点,对这四个点分别做一次检查,然后一直wa,还一直找不到哪儿错了。
然后对所有“危险点”打表,结果因为读入用的是%c不是%s错了一次。
话说一直觉得这种读入一个字符的题目中有各种各样的空格,然后读入一个字符各种莫名wa挺坑爹的。
#include<stdio.h>
#include<string.h>
#define N 11
struct point
{
int x,y;
int id;
}a[N];
int mark[N][N],map[N][N];
int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int judge(int x,int y)
{
if(x>=1&&x<=10&&y>=1&&y<=9) return 1;
return 0;
}
int judget(int x,int y)
{
if(x>=1&&x<=3&&y>=4&&y<=6) return 1;
return 0;
}
int main()
{
int n,x,y;
while(scanf("%d%d%d",&n,&x,&y),n+x+y)
{
getchar();
memset(mark,0,sizeof(mark));
memset(map,0,sizeof(map));
for(int i=1;i<=n;i++)
{
char s[10];
int x,y;
scanf("%s%d%d",s,&x,&y);
getchar();
a[i].x=x;a[i].y=y;
mark[x][y]=1;
if(s[0]=='G') a[i].id=1;
else if(s[0]=='C') a[i].id=2;
else if(s[0]=='H') a[i].id=3;
else if(s[0]=='R') a[i].id=4;
}
for(int i=1;i<=n;i++)
{
int x,y;
int flag;
x=a[i].x;
y=a[i].y;
if(a[i].id==1||a[i].id==4)
{
for(int j=x-1;j>=1;j--)
{
map[j][y]=1;
if(mark[j][y]==1)
break;
}
for(int j=x+1;j<=10;j++)
{
map[j][y]=1;
if(mark[j][y]==1)
break;
}
for(int j=y-1;j>=1;j--)
{
map[x][j]=1;
if(mark[x][j]==1)
break;
}
for(int j=y+1;j<=9;j++)
{
map[x][j]=1;
if(mark[x][j]==1)
break;
}
}
else if(a[i].id==2)
{
flag=0;
for(int j=x-1;j>=1;j--)
{
if(flag==1) map[j][y]=1;
if(mark[j][y]==1) flag++;
if(flag==2) break;
}
flag=0;
for(int j=x+1;j<=10;j++)
{
if(flag==1) map[j][y]=1;
if(mark[j][y]==1) flag++;
if(flag==2) break;
}
flag=0;
for(int j=y-1;j>=1;j--)
{
if(flag==1) map[x][j]=1;
if(mark[x][j]==1) flag++;
if(flag==2) break;
}
flag=0;
for(int j=y+1;j<=9;j++)
{
if(flag==1) map[x][j]=1;
if(mark[x][j]==1) flag++;
if(flag==2) break;
}
}
else if(a[i].id==3)
{
int tx,ty;
tx=x+1;ty=y+2;
if(judge(tx,ty)&&mark[x][y+1]!=1) map[tx][ty]=1;
tx=x+1;ty=y-2;
if(judge(tx,ty)&&mark[x][y-1]!=1) map[tx][ty]=1;
tx=x-1;ty=y+2;
if(judge(tx,ty)&&mark[x][y+1]!=1) map[tx][ty]=1;
tx=x-1;ty=y-2;
if(judge(tx,ty)&&mark[x][y-1]!=1) map[tx][ty]=1;
tx=x+2;ty=y+1;
if(judge(tx,ty)&&mark[x+1][y]!=1) map[tx][ty]=1;
tx=x+2;ty=y-1;
if(judge(tx,ty)&&mark[x+1][y]!=1) map[tx][ty]=1;
tx=x-2;ty=y+1;
if(judge(tx,ty)&&mark[x-1][y]!=1) map[tx][ty]=1;
tx=x-2;ty=y-1;
if(judge(tx,ty)&&mark[x-1][y]!=1) map[tx][ty]=1;
}
}
int flag=0;
for(int i=0;i<4;i++)
{
int tx,ty;
tx=x+dir[i][0];
ty=y+dir[i][1];
if(judget(tx,ty)&&map[tx][ty]==0)
{
flag=1;
break;
}
}
if(flag) printf("NO\n");
else printf("YES\n");
}
return 0;
}