由于题目格式原因,此题不提供题目。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std;
enum {no,yes};
bool attack[18][18];
char p[18][18];
void re()
{
for(int i=0; i<12; i++)
attack[i][3]=attack[i][7]=1;
for(int i=0; i<12; i++)
attack[0][i]=attack[4][i]=1;
}
void A(int x,int y)
{
if(p[x][y]=='R'||p[x][y]=='G')
{
for(int i=x+1; i<=10; i++)
{
if(p[i][y]!='\0') break;
attack[i][y]=yes;
}
for(int i=x-1; i>0; i--)
{
if(p[i][y]!='\0') break;
attack[i][y]=yes;
}
for(int i=y+1; i<=9; i++)
{
if(p[x][i]!='\0') break;
attack[x][i]=yes;
}
for(int i=y-1; i>0; i--)
{
if(p[x][i]!='\0') break;
attack[x][i]=yes;
}
}
else if(p[x][y]=='H')
{
if(p[x-1][y]=='\0'&&x-2>0)
{
if(y-1>0) attack[x-2][y-1]=yes;
if(y+1<=9) attack[x-2][y+1]=yes;
}
if(p[x+1][y]=='\0'&&x+2<=10)
{
if(y-1>0) attack[x+2][y-1]=yes;
if(y+1<=9) attack[x+2][y+1]=yes;
}
if(p[x][y-1]=='\0'&&y-2>0)
{
if(x-1>0) attack[x-1][y-2]=yes;
if(x+1<=10) attack[x+1][y-2]=yes;
}
if(p[x][y+1]=='\0'&&y+2<=9)
{
if(x-1>0) attack[x-1][y+2]=yes;
if(x+1<=10) attack[x+1][y+2]=yes;
}
}
else if(p[x][y]=='C')
{
for(int i=x+1; i<=10; i++)
if(p[i][y]!='\0')
{
for(int j=i+1; j<=10; j++)
{
if(p[j][y]!='\0') break;
p[j][y]=yes;
}
break;
}
for(int i=x-1; i>0; i--)
if(p[i][y]!='\0')
{
for(int j=i-1; j>0; j--)
{
if(p[j][y]!='\0') break;
p[j][y]=yes;
}
break;
}
for(int i=y+1; i<=9; i++)
if(p[x][i]!='\0')
{
for(int j=i+1; j<=9; j++)
{
if(p[x][j]!='\0') break;
p[x][j]=yes;
}
break;
}
for(int i=y-1; i>0; i--)
if(p[x][i]!='\0')
{
for(int j=i-1; j>0; j--)
{
if(p[x][j]!='\0') break;
p[x][j]=yes;
}
break;
}
}
}
int pd(int x,int y)
{
if(attack[x][y]&&attack[x-1][y]&&attack[x+1][y]&&attack[x][y+1]&&attack[x][y-1])
return 1;
else return 0;
}
int main()
{
int n,h,l;
while(scanf("%d %d %d",&n,&h,&l)&&n)
{
memset(attack,0,sizeof(attack));
memset(p,0,sizeof(p));
re();
char ch;
int x,y;
for(int i=0; i<n; i++)
{
getchar();
ch=getchar();
cin >> x >> y;
p[x][y]=ch;
}
for(int i=1; i<=10; i++)
for(int j=1; j<=9; j++)
A(i,j);
int t=pd(h,l);
if(t) printf("YES\n");
else printf("NO\n");
}
return 0;
}