Advertisement
Guest User

Untitled

a guest
Jul 16th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.15 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define sc(a) scanf("%d", &a)
  6. #define sc2(a,b) scanf("%d %d", &a, &b)
  7. #define pri(x) printf("%d\n", x)
  8. #define prie(x) printf("%d ", x)
  9. #define sz(x) (int)((x).size())
  10. #define mp make_pair
  11. #define pb push_back
  12. #define f first
  13. #define s second
  14. #define sq(x) ((x)*(x))
  15. #define BUFF ios::sync_with_stdio(false)
  16.  
  17. typedef long long int ll;
  18. typedef pair<int, int> ii;
  19. typedef vector<int> vi;
  20. typedef vector<vi> vvi;
  21. typedef vector<ii> vii;
  22. const int INF = 0x3f3f3f3f;
  23. const ll LINF = 0x3f3f3f3f3f3f3f3fll;
  24.  
  25. char b[10][10];
  26.  
  27. void pre() {
  28.     for (int i = 0; i < 10; i++)
  29.         for (int j = 0; j < 10; j++)
  30.             b[i][j] = '.';
  31. }
  32.  
  33. void le(int n) {
  34.     for (int i = 0; i < n; i++) {
  35.         char s[10];
  36.         scanf(" %s", s);
  37.         b[8 - (s[2] - '1')][1 + s[1] - 'a'] = s[0];
  38.     }
  39. }
  40.  
  41. bool check(int x, int y) {
  42.     if (x < 1 or x > 8 or y < 1 or y > 8) return 1;
  43.  
  44.     // peao
  45.     if (b[x - 1][y - 1] == 'P') return 1;
  46.     if (b[x - 1][y + 1] == 'P') return 1;
  47.  
  48.     // rei
  49.     if (b[x][y - 1] == 'W') return 1;
  50.     if (b[x][y + 1] == 'W') return 1;
  51.     if (b[x - 1][y] == 'W') return 1;
  52.     if (b[x + 1][y] == 'W') return 1;
  53.     if (b[x - 1][y - 1] == 'W') return 1;
  54.     if (b[x - 1][y + 1] == 'W') return 1;
  55.     if (b[x + 1][y - 1] == 'W') return 1;
  56.     if (b[x + 1][y + 1] == 'W') return 1;
  57.  
  58.     // torre
  59.     for (int i = 1; ; i++) {
  60.         int k = y - i;
  61.         if (k < 1 or k > 8) break;
  62.         char p = b[x][k];
  63.         if (p == 'T' or p == 'R') return 1;
  64.         if (p != '.') break;
  65.     }
  66.     for (int i = 1; ; i++) {
  67.         int k = y + i;
  68.         if (k < 1 or k > 8) break;
  69.         char p = b[x][k];
  70.         if (p == 'T' or p == 'R') return 1;
  71.         if (p != '.') break;
  72.     }
  73.     for (int i = 1; ; i++) {
  74.         int k = x - i;
  75.         if (k < 1 or k > 8) break;
  76.         char p = b[k][y];
  77.         if (p == 'T' or p == 'R') return 1;
  78.         if (p != '.') break;
  79.     }
  80.     for (int i = 1; ; i++) {
  81.         int k = x + i;
  82.         if (k < 1 or k > 8) break;
  83.         char p = b[k][y];
  84.         if (p == 'T' or p == 'R') return 1;
  85.         if (p != '.') break;
  86.     }
  87.  
  88.     // bispo
  89.     for (int i = 1; ; i++) {
  90.         int k = x - i, w = y - i;
  91.         if (k < 1 or k > 8 or w < 1 or w > 8) break;
  92.         char p = b[k][w];
  93.         if (p == 'B' or p == 'R') return 1;
  94.         if (p != '.') break;
  95.     }
  96.     for (int i = 1; ; i++) {
  97.         int k = x - i, w = y + i;
  98.         if (k < 1 or k > 8 or w < 1 or w > 8) break;
  99.         char p = b[k][w];
  100.         if (p == 'B' or p == 'R') return 1;
  101.         if (p != '.') break;
  102.     }
  103.     for (int i = 1; ; i++) {
  104.         int k = x + i, w = y - i;
  105.         if (k < 1 or k > 8 or w < 1 or w > 8) break;
  106.         char p = b[k][w];
  107.         if (p == 'B' or p == 'R') return 1;
  108.         if (p != '.') break;
  109.     }
  110.     for (int i = 1; ; i++) {
  111.         int k = x + i, w = y + i;
  112.         if (k < 1 or k > 8 or w < 1 or w > 8) break;
  113.         char p = b[k][w];
  114.         if (p == 'B' or p == 'R') return 1;
  115.         if (p != '.') break;
  116.     }
  117.  
  118.     return 0;
  119. }
  120.  
  121. int main() {
  122.     int n;
  123.     while (sc(n) != EOF) {
  124.         pre();
  125.         le(n);
  126.  
  127.         char s[10]; scanf(" %s", s);
  128.         int x = 8 - (s[2] - '1');
  129.         int y = 1 + s[1] - 'a';
  130.  
  131.         if (check(x, y) and check(x, y - 1) and
  132.             check(x, y + 1) and check(x - 1, y) and
  133.             check(x - 1, y - 1) and check(x - 1, y + 1) and
  134.             check(x + 1, y) and check(x + 1, y - 1) and
  135.             check(x + 1, y + 1)) printf("SIM\n");
  136.         else printf("NAO\n");
  137.     }
  138.     return 0;
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement