求交玄关,违规紫衫
查看原帖
求交玄关,违规紫衫
1036180
ChampionCyan楼主2024/8/4 18:57

怎么莫名押韵

咳咳,回正题,懒得绑定又想知道代码对不对,所以希望绑定 UVA 了的好心人用我的代码交一发,告诉我过没过。

不知道违不违规,违规紫衫。

帮我的人我绝不追究抄袭责任。

Code:

#include <bits/stdc++.h>
using namespace std;
bool eat[11][9];

char state[11][9];
//*  G = 帥
//*  R = 車
//*  H = 馬
//*  C = 炮
//*  N = 空气

inline bool check(int x, int y) {
    if (x < 1 || x > 3 || y < 4 || y > 6)
        return true;
    return eat[x][y];
}

inline bool rg(int x, int y, int bx, int by) {
    if (x == bx && y == by)
        return false;
    if (x == bx) {
        for (int j = y + 1; j < by; j++)
            if (state[x][j] != 'N')
                return false;
        return true;
    }
    if (y == by) {
        for (int i = x + 1; i < bx; i++)
            if (state[i][y] != 'N')
                return false;
        return true;
    }
    return false;
}

inline bool ch(int x, int y, int bx, int by) {
    if (abs(bx - x) == 1 && by - y == 2)
        return state[x][y + 1] != 'N';
    if (abs(bx - x) == 1 && y - by == 2)
        return state[x][y - 1] != 'N';
    if (bx - x == 2 && abs(by - y) == 1)
        return state[x + 1][y] != 'N';
    if (x - bx == 2 && abs(by - y) == 1)
        return state[x - 1][y] != 'N';
    return false;
}

inline bool cc(int x, int y, int bx, int by) {
    int dis = 0;
    if (x == bx && y == by)
        return false;
    if (x == bx) {
        for (int j = y + 1; j < by; j++)
            if (state[x][j] != 'N')
                dis++;
        return dis == 1;
    }
    if (y == by) {
        for (int i = x + 1; i < bx; i++)
            if (state[i][y] != 'N')
                dis++;
        return dis == 1;
    }
    return false;
}

inline void init() {
    for (int x = 1; x <= 10; x++) {
        for (int y = 1; y <= 9; y++) {
            if (state[x][y] == 'N')
                continue;
            if (state[x][y] == 'R' || state[x][y] == 'G') {
                for (int i = 1; i <= 3; i++)
                    for (int j = 4; j <= 6; j++)
                        if (rg(i, j, x, y))
                            eat[i][j] = true;
            }
            if (state[x][y] == 'H') {
                for (int i = 1; i <= 3; i++)
                    for (int j = 4; j <= 6; j++)
                        if (ch(i, j, x, y))
                            eat[i][j] = true;
            }
            if (state[x][y] == 'C') {
                for (int i = 1; i <= 3; i++)
                    for (int j = 4; j <= 6; j++)
                        if (cc(i, j, x, y))
                            eat[i][j] = true;
            }
        }
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n, bx, by;
    cin >> n >> bx >> by;
    while (n + bx + by != 0) {
        for (int i = 1; i <= 10; i++)
            for (int j = 1; j <= 9; j++)
                eat[i][j] = false, state[i][j] = 'N';
        while (n--) {
            int x, y;
            char cha;
            cin >> cha >> x >> y;
            state[x][y] = cha;
        }
        init();
        if (check(bx, by + 1) && check(bx, by - 1) && check(bx + 1, by) && check(bx - 1, by))
            puts("YES");
        else
            puts("NO");
        cin >> n >> bx >> by;
    }
    return 0;
}
2024/8/4 18:57
加载中...