import java.util.Scanner;
class A {
public int r;
public int c;
public char ch;
}
public class Main {
private final static int R = 11;
private final static int C = 10;
private final static int m[] = { -1, 1, 0, 0 };
private final static int n[] = { 0, 0, -1, 1 };
private final static int hm[] = { -2, -2, 2, 2, 1, 1, -1, -1 };
private final static int hn[] = { -1, 1, -1, 1, -2, 2, -2, 2 };
private final static int hmm[] = { -1, -1, 1, 1, 1, 1, -1, -1 };
private final static int hnn[] = { -1, 1, -1, 1, -1, 1, -1, 1 };
private char[][] chess;
private int r, c;
public boolean ok() {
chess[r][c] = 0;
for (int i = 0; i < m.length; i++) {
int nr = r + m[i];
int nc = c + n[i];
if (generalBound(nr, nc)) {
char old = chess[nr][nc];
chess[nr][nc] = 'B';
if (!ok(nr, nc)) {
return false;
}
chess[nr][nc] = old;
}
}
return true;
}
private boolean ok(int r, int c) {
for (int i = 0; i < m.length; i++) {
A aa = lineFirst(r, c, i);
char ch = aa.ch;
if (ch == 'G' || ch == 'R') {
return true;
} else if (ch != 0) {
aa = lineFirst(aa.r, aa.c, i);
if (aa.ch == 'C') {
return true;
}
}
}
for (int i = 0; i < hm.length; i++) {
int nr = r + hm[i];
int nc = c + hn[i];
if (bound(nr, nc)) {
if (chess[nr][nc] == 'H') {
int cr = r + hmm[i];
int cc = c + hnn[i];
if (chess[cr][cc] == 0) {
return true;
}
}
}
}
return false;
}
private A lineFirst(int sr, int sc, int index) {
A re = new A();
int nr = sr;
int nc = sc;
while (true) {
nr += m[index];
nc += n[index];
if (bound(nr, nc)) {
if (chess[nr][nc] != 0) {
re.r = nr;
re.c = nc;
re.ch = chess[nr][nc];
return re;
}
} else {
return re;
}
}
}
private static boolean bound(int r, int c) {
return r >= 1 && c >= 1 && r < R && c < C;
}
private static boolean generalBound(int r, int c) {
return r >= 1 && r <= 3 && c >= 4 && c <= 6;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (true) {
int n = scan.nextInt();
int r = scan.nextInt();
int c = scan.nextInt();
if (n == 0 && r == 0 && c == 0) {
return;
}
Main main = new Main();
main.chess = new char[R][C];
main.chess[r][c] = 'B';
main.r = r;
main.c = c;
for (int i = 0; i < n; i++) {
char nn = scan.next().charAt(0);
int nr = scan.nextInt();
int nc = scan.nextInt();
main.chess[nr][nc] = nn;
}
if (main.ok()) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
}
poj4001
最新推荐文章于 2021-08-13 14:07:31 发布