#include <cstdio>
#include <algorithm>
using namespace std;
char Lu, red[8][8];
int black[8][8], Hui[8][2];
int n, x, y, a, b, mark,w,e;
int main(){
while (scanf("%d", &n)){
int flag = 0, e = 0;
memset(red, 0, sizeof(red));
memset(black, 0, sizeof(black));
memset(Hui, 0, sizeof(Hui));
scanf("%d%d", &a, &b);
black[a][b] = 1;
for (int i = 1; i <= n; i++){
scanf("%c%d%d", &Lu, &x, &y);
Hui[i][1] = x, Hui[i][2] = y;
red[x][y] = Lu;
}
for (int i = -1; i <= 1; i++){
for (int j = -1; j <= 1; j++){
int dx = a + i, dy = b + j;
if (dx >= 1 && dx <= n && dy >= 1 && dy <= n && black[dx][dy] == 0 && red[dx][dy] == 0){
w = 0;
e++;
if (w)
break;
for (int k = 1; k <= n; k++){
if (red[Hui[k][1]][Hui[k][2]] == 'G'){
mark = 0;
if (Hui[k][1] == dx){
if (dy < Hui[k][2]){
int temp = dy;
dy = Hui[k][2];
Hui[k][2] = temp;
}
for (int q = Hui[k][2] + 1; q < dy; q++)
if (red[dx][q] == 0)
mark++;
if (mark == dy - Hui[k][2] - 1){
flag++;
w = 1;
}
}
if (Hui[k][2] == dy){
if (dx < Hui[k][1]){
int temp = dx;
dx = Hui[k][1];
Hui[k][1] = temp;
}
for (int q = Hui[k][1] + 1; q < dx; q++)
if (red[q][dy] == 0)
mark++;
if (mark == dx - Hui[k][1] - 1){
flag++;
w = 1;
}
}
}
if (red[Hui[k][1]][Hui[k][2]] == 'R'){
mark = 0;
if (Hui[k][1] == dx){
if (dy < Hui[k][2]){
int temp = dy;
dy = Hui[k][2];
Hui[k][2] = temp;
}
for (int q = Hui[k][2] + 1; q < dy; q++)
if (red[dx][q] == 0)
mark++;
if (mark == dy - Hui[k][2] - 1){
flag++;
w = 1;
}
}
if (Hui[k][2] == dy){
if (dx < Hui[k][1]){
int temp = dx;
dx = Hui[k][1];
Hui[k][1] = temp;
}
for (int q = Hui[k][1] + 1; q < dx; q++)
if (red[q][dy] == 0)
mark++;
if (mark == dx - Hui[k][1] - 1){
flag++;
w = 1;
}
}
}
if (red[Hui[k][1]][Hui[k][2]] == 'C'){
mark = 0;
if (Hui[k][1] == dx){
if (dy < Hui[k][2]){
int temp = dy;
dy = Hui[k][2];
Hui[k][2] = temp;
}
for (int q = Hui[k][2] + 1; q < dy; q++)
if (red[dx][q] == 0)
mark++;
if (mark == dy - Hui[k][2] - 2){
flag++;
w = 1;
}
}
if (Hui[k][2] == dy){
if (dx < Hui[k][1]){
int temp = dx;
dx = Hui[k][1];
Hui[k][1] = temp;
}
for (int q = Hui[k][1] + 1; q < dx; q++)
if (red[q][dy] == 0)
mark++;
if (mark == dx - Hui[k][1] - 2){
flag++;
w = 1;
}
}
}
if (red[Hui[k][1]][Hui[k][2]] == 'H'){
if (dx == Hui[k][1] + 2 && (dy == Hui[k][2] + 1 || dy == Hui[k][2] - 1) && red[Hui[k][1] + 1][Hui[k][2]] == 0){
flag++;
w = 1;
}
if (dx == Hui[k][1] - 2 && (dy == Hui[k][2] + 1 || dy == Hui[k][2] - 1) && red[Hui[k][1] - 1][Hui[k][2]] == 0){
flag++;
w = 1;
}
if (dy == Hui[k][2] + 2 && (dx == Hui[k][1] + 1 || dx == Hui[k][1] - 1) && red[Hui[k][2] + 1][Hui[k][1]] == 0){
flag++;
w = 1;
}
if (dy == Hui[k][2] - 2 && (dx == Hui[k][1] + 1 || dx == Hui[k][1] - 1) && red[Hui[k][2] - 1][Hui[k][1]] == 0){
flag++;
w = 1;
}
}
}
}
}
}
if (flag == e)
printf("yes\n");
else
printf("no\n");
}
return 0;
}
算法竞赛入门第二版 4-1
最新推荐文章于 2023-08-27 00:48:34 发布