怎么莫名押韵
咳咳,回正题,懒得绑定又想知道代码对不对,所以希望绑定 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;
}