这道题,不多说是lrj的,很麻烦。写了很久。但是没过。
#include<cstdio>
#include<cstring>
int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
int gragh[20][20];
int hx,hy;
int rx,ry;
int n;
//车1马2炮3
int che()
{
int a = hx,b = hy;
a++;
while(a <= 10){
if(gragh[a][hy] == 0){
a++;
continue;
}
else if(gragh[a][hy] == 1){
return 1;
}
else break;
}
a = hx;
a--;
while(a >= 1){
if(gragh[a][hy] == 0){
a--;
continue;
}
else if(gragh[a][hy] == 1){
return 1;
}
else break;
}
b++;
while(b <= 9){
if(gragh[hx][b] == 0){
b++;
continue;
}
else if(gragh[hx][b] == 1){
return 1;
}
else break;
}
b = hy;
b--;
while(b >= 1){
if(gragh[hx][b] == 0){
b--;
continue;
}
else if(gragh[hx][b] == 1){
return 1;
}
else break;
}
return 0;
}
int ma()
{
int a = hx,b = hy;
if(a - 2 >= 1 && b + 1 <= 9){
if(gragh[a-2][b+1] == 2 && gragh[a-1][b+1] == 0)
return 1;
}
if(a - 1 >= 1 && b + 2 <= 9){
if(gragh[a-1][b+2] == 2 && gragh[a-1][b+1] == 0)
return 1;
}
if(a + 1 <= 10 && b + 2 <= 9){
if(gragh[a+1][b+2] == 2 && gragh[a+1][b+1] == 0)
return 1;
}
if(a + 2 <= 10 && b + 1 <= 9){
if(gragh[a+2][b+1] == 2 && gragh[a+1][b+1] == 0)
return 1;
}
if(a + 2 <= 10 && b - 1 >= 1){
if(gragh[a+2][b-1] == 2 && gragh[a+1][b-1] == 0)
return 1;
}
if(a + 1 <= 10 && b - 2 >= 1){
if(gragh[a+1][b-2] == 2 && gragh[a+1][b-1] == 0)
return 1;
}
if(a - 1 >= 1 && b - 2 >= 1){
if(gragh[a-1][b-2] == 2 && gragh[a-1][b-1] == 0)
return 1;
}
if(a - 2 >= 1 && b - 1 >= 1){
if(gragh[a-2][b-1] == 2 && gragh[a-1][b-1] == 0)
return 1;
}
return 0;
}
int pao()
{
int a = hx,b = hy;
b++;
while(b <= 9){
if(gragh[hx][b] == 0){
b++;
continue;
}
else break;
}
b++;
while(b <= 9){
if(gragh[hx][b] == 0){
b++;
}
else if(gragh[hx][b] == 3){
return 1;
}
else break;
}
b = hy;
b--;
while(b >= 1){
if(gragh[hx][b] == 0){
b--;
continue;
}
else break;
}
b--;
while(b >= 1){
if(gragh[hx][b] == 0){
b--;
continue;
}
else if(gragh[hx][b] == 3){
return 1;
}
else break;
}
a++;
while(a <= 10){
if(gragh[a][hy] == 0){
a++;
continue;
}
else break;
}
a++;
while(a <= 10){
if(gragh[a][hy] == 0){
a++;
continue;
}
else if(gragh[a][hy] == 3){
return 1;
}
else break;
}
return 0;
}
int judge()
{
int a = che();
int b = ma();
int c = pao();
if(a || b || c)
return 1;
else
return 0;
}
int main()
{
// freopen("in.txt","r",stdin);
while(scanf("%d%d%d",&n,&hx,&hy) != EOF){
if(n == 0 && hx == 0 && hy == 0)
break;
memset(gragh,0,sizeof(gragh));
char c;
int x,y;
for(int i = 1;i <= n; i++){
scanf("%s%d%d",&c,&x,&y);
if(c == 'G'){
rx = x;
ry = y;
gragh[x][y] = 1;
}
if(c == 'R'){
gragh[x][y] = 1;
}
if(c == 'H'){
gragh[x][y] = 2;
}
if(c == 'C'){
gragh[x][y] = 3;
}
}
int ans = 0;
for(int i = 0;i <= 3; i++){
gragh[hx][hy] = 0;
if(hx + dir[i][0] > 10 || hx + dir[i][0] < 1 || hy + dir[i][1] > 9 || hy + dir[i][1] < 1){
ans++;
continue;
}
hx += dir[i][0];
hy += dir[i][1];
gragh[hx][hy] = 1;
if(judge())
ans++;
}
if(ans == 4)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}