Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define sc(a) scanf("%d", &a)
- #define sc2(a,b) scanf("%d %d", &a, &b)
- #define pri(x) printf("%d\n", x)
- #define prie(x) printf("%d ", x)
- #define sz(x) (int)((x).size())
- #define mp make_pair
- #define pb push_back
- #define f first
- #define s second
- #define sq(x) ((x)*(x))
- #define BUFF ios::sync_with_stdio(false)
- typedef long long int ll;
- typedef pair<int, int> ii;
- typedef vector<int> vi;
- typedef vector<vi> vvi;
- typedef vector<ii> vii;
- const int INF = 0x3f3f3f3f;
- const ll LINF = 0x3f3f3f3f3f3f3f3fll;
- char b[10][10];
- void pre() {
- for (int i = 0; i < 10; i++)
- for (int j = 0; j < 10; j++)
- b[i][j] = '.';
- }
- void le(int n) {
- for (int i = 0; i < n; i++) {
- char s[10];
- scanf(" %s", s);
- b[8 - (s[2] - '1')][1 + s[1] - 'a'] = s[0];
- }
- }
- bool check(int x, int y) {
- if (x < 1 or x > 8 or y < 1 or y > 8) return 1;
- // peao
- if (b[x - 1][y - 1] == 'P') return 1;
- if (b[x - 1][y + 1] == 'P') return 1;
- // rei
- if (b[x][y - 1] == 'W') return 1;
- if (b[x][y + 1] == 'W') return 1;
- if (b[x - 1][y] == 'W') return 1;
- if (b[x + 1][y] == 'W') return 1;
- if (b[x - 1][y - 1] == 'W') return 1;
- if (b[x - 1][y + 1] == 'W') return 1;
- if (b[x + 1][y - 1] == 'W') return 1;
- if (b[x + 1][y + 1] == 'W') return 1;
- // torre
- for (int i = 1; ; i++) {
- int k = y - i;
- if (k < 1 or k > 8) break;
- char p = b[x][k];
- if (p == 'T' or p == 'R') return 1;
- if (p != '.') break;
- }
- for (int i = 1; ; i++) {
- int k = y + i;
- if (k < 1 or k > 8) break;
- char p = b[x][k];
- if (p == 'T' or p == 'R') return 1;
- if (p != '.') break;
- }
- for (int i = 1; ; i++) {
- int k = x - i;
- if (k < 1 or k > 8) break;
- char p = b[k][y];
- if (p == 'T' or p == 'R') return 1;
- if (p != '.') break;
- }
- for (int i = 1; ; i++) {
- int k = x + i;
- if (k < 1 or k > 8) break;
- char p = b[k][y];
- if (p == 'T' or p == 'R') return 1;
- if (p != '.') break;
- }
- // bispo
- for (int i = 1; ; i++) {
- int k = x - i, w = y - i;
- if (k < 1 or k > 8 or w < 1 or w > 8) break;
- char p = b[k][w];
- if (p == 'B' or p == 'R') return 1;
- if (p != '.') break;
- }
- for (int i = 1; ; i++) {
- int k = x - i, w = y + i;
- if (k < 1 or k > 8 or w < 1 or w > 8) break;
- char p = b[k][w];
- if (p == 'B' or p == 'R') return 1;
- if (p != '.') break;
- }
- for (int i = 1; ; i++) {
- int k = x + i, w = y - i;
- if (k < 1 or k > 8 or w < 1 or w > 8) break;
- char p = b[k][w];
- if (p == 'B' or p == 'R') return 1;
- if (p != '.') break;
- }
- for (int i = 1; ; i++) {
- int k = x + i, w = y + i;
- if (k < 1 or k > 8 or w < 1 or w > 8) break;
- char p = b[k][w];
- if (p == 'B' or p == 'R') return 1;
- if (p != '.') break;
- }
- return 0;
- }
- int main() {
- int n;
- while (sc(n) != EOF) {
- pre();
- le(n);
- char s[10]; scanf(" %s", s);
- int x = 8 - (s[2] - '1');
- int y = 1 + s[1] - 'a';
- if (check(x, y) and check(x, y - 1) and
- check(x, y + 1) and check(x - 1, y) and
- check(x - 1, y - 1) and check(x - 1, y + 1) and
- check(x + 1, y) and check(x + 1, y - 1) and
- check(x + 1, y + 1)) printf("SIM\n");
- else printf("NAO\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement