????????????????????
查看原帖
????????????????????
1395691
Xuan_0608楼主2024/12/28 16:22
#include<stdio.h>
#include<string.h>
char a[15][15];
int b[15][15];
struct Command {
    int a, b;
    char c;
} cmd[10];

void aa(int x, int y, int flag) {
    int flag2 = flag;
    for(int i = x, j = y - 1; j != 0; j--)
        if(a[i][j] != 0 && a[i][j] != 'E') {
            if(flag) {
                b[i][j] = 1;
                break;
            }
            else flag = 1;
        }
        else if(flag) b[i][j] = 1;
    flag = flag2;
    for(int i = x, j = y + 1; j != 10; j++)
        if(a[i][j] != 0 && a[i][j] != 'E') {
            if(flag) {
                b[i][j] = 1;
                break;
            }
            else flag = 1;
        }
        else if(flag) b[i][j] = 1;
    flag = flag2;
    for(int i = x + 1, j = y; i != 11; i++)
        if(a[i][j] != 0 && a[i][j] != 'E') {
            if(flag) {
                b[i][j] = 1;
                break;
            }
            else flag = 1;
        }
        else if(flag) b[i][j] = 1;
    flag = flag2;
    for(int i = x - 1, j = y; i != 0; i--)
        if(a[i][j] != 0 && a[i][j] != 'E') {
            if(flag) {
                b[i][j] = 1;
                break;
            }
            else flag = 1;
        }
        else if(flag) b[i][j] = 1;
}

void bb(int x, int y) {
    if(x >= 3 && a[x - 1][y] == 0) {
        if(y != 1) b[x - 2][y - 1] = 1;
        if(y != 9) b[x - 2][y + 1] = 1;
    }
    if(x <= 8 && a[x + 1][y] == 0) {
        if(y != 1) b[x + 2][y - 1] = 1;
        if(y != 9) b[x + 2][y + 1] = 1;
    }
    if(y >= 3 && a[x][y - 1] == 0) {
        if(x != 1) b[x - 1][y - 2] = 1;
        if(x != 10) b[x + 1][y - 2] = 1;
    }
    if(y <= 7 && a[x][y + 1] == 0) {
        if(x != 1) b[x - 1][y + 2] = 1;
        if(x != 10) b[x + 1][y + 2] = 1;
    }
}

void cc(char c, int x, int y) {
    if(c == 'R' || c == 'G') aa(x, y, 1);
    else if(c == 'C') aa(x, y, 0);
    else if(c == 'H') bb(x, y);
}

int dd(int x, int y) {
    if(x == 1 || x == 2)
        if(b[x + 1][y] == 0)
            return 0;
    if(x == 2 || x == 3)
        if(b[x - 1][y] == 0)
            return 0;
    if(y == 4 || y == 5)
        if(b[x][y + 1] == 0)
            return 0;
    if(y == 6 || y == 5)
        if(b[x][y - 1] == 0)
            return 0;
    return 1;
}

int main() {
    int n, x, y;
    char ch;
    while(scanf("%d%d%d", &n, &x, &y) == 3 && n)
    {
    	memset(a, 0, sizeof(a));
    	memset(b, 0, sizeof(b));
    	a[x][y] = 'E';
	    int nn = n, xx = x, yy = y;
	    while(n--) {
	        scanf("%c%d%d", &ch, &x, &y);
	        cmd[n].a = x;
	        cmd[n].b = y;
	        cmd[n].c = ch;
	        a[x][y] = ch;
	    }
	    while(nn--) cc(cmd[nn].c, cmd[nn].a, cmd[nn].b);
	    int flag = dd(xx, yy);
	    if(flag) printf("YES\n");
	    else printf("NO\n");
	}
    return 0;
}

对于样例:

2 1 4
G 10 5
R 6 4

3 1 5
H 4 5
G 10 5
C 7 5

2 1 5
R 4 4
G 10 5

3 1 5
G 10 4
R 5 5
H 3 7

4 1 5
G 10 4
C 6 5
H 5 5
R 1 1

5 1 5
G 10 4
C 6 5
H 5 5
H 4 5
R 1 1

3 1 5
G 10 4
C 2 7
H 3 7

3 1 5
G 10 4
R 5 5
R 1 6

4 1 5
G 10 4
R 5 5
R 1 6
H 3 7

0 0 0

标准答案:

YES
NO
NO
YES
YES
NO
NO
NO
YES

我的答案:

NO

求调

2024/12/28 16:22
加载中...