main.cc 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include <cstdio>
  2. #include <cstring>
  3. #define X 10
  4. #define Y 9
  5. int dx[4] = {1, 0, -1, 0};
  6. int dy[4] = {0, 1, 0, -1};
  7. int hx[8] = {2, 2, 1, -1, -2, -2, 1, -1};
  8. int hy[8] = {1, -1, 2, 2, 1, -1, -2, -2};
  9. char board[X + 1][Y + 1];
  10. bool is_out(int x, int y) {
  11. return x < 1 || X < x || y < 1 || Y < y;
  12. }
  13. bool solve(int x, int y) {
  14. if (x < 1 || 3 < x || y < 4 || 6 < y) return true;
  15. for (int i = 0; i < 4; i++) {
  16. int nx = x + dx[i];
  17. int ny = y + dy[i];
  18. char c = 0;
  19. int gap = 0;
  20. while (gap < 2 && !is_out(nx, ny)) {
  21. c = board[nx][ny];
  22. nx += dx[i];
  23. ny += dy[i];
  24. if (c == 0) continue;
  25. switch (c) {
  26. case 'G': case 'R':
  27. if (gap == 0) return true;
  28. break;
  29. case 'C':
  30. if (gap == 1) return true;
  31. break;
  32. }
  33. gap++;
  34. }
  35. }
  36. for (int i = 0; i < 8; i++) {
  37. int nx = x + hx[i];
  38. int ny = y + hy[i];
  39. if (is_out(nx, ny)) continue;
  40. if (board[nx][ny] == 'H') {
  41. nx = x + dx[i / 2];
  42. ny = y + dy[i / 2];
  43. if (board[nx][ny] == 0) return true;
  44. }
  45. }
  46. return false;
  47. }
  48. int main() {
  49. int N, gx, gy;
  50. for (;;) {
  51. scanf("%d %d %d", &N, &gx, &gy);
  52. if (N == 0 && gx == 0 && gy == 0) break;
  53. memset(board, 0, sizeof(board));
  54. char s[2];
  55. int x, y;
  56. for (int n = 0; n < N; n++) {
  57. scanf("%s %d %d", &s, &x, &y);
  58. board[x][y] = s[0];
  59. }
  60. bool checkmate = true;
  61. for (int nx = gx + 1, ny = gy; !is_out(nx, ny); nx++) {
  62. char c = board[nx][ny];
  63. if (c == 0) continue;
  64. if (c == 'G') checkmate = false;
  65. break;
  66. }
  67. for (int i = 0; i < 4; i++) {
  68. int nx = gx + dx[i];
  69. int ny = gy + dy[i];
  70. checkmate &= solve(nx, ny);
  71. }
  72. printf(checkmate ? "YES\n" : "NO\n");
  73. }
  74. }