ccbeginner

TOJ 460

Feb 17th, 2020
121
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //TOJ 460
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. int tonum(char c){
  6.     if('0' <= c && c <= '9')return c - '0';
  7.     return c - 'A' + 10;
  8. }
  9.  
  10. int maze[3][3];
  11. int sides[3][3];
  12. int x[9], y[9];
  13. int atk[9][4];//0 := up, 1 := left, 2 := down, 3 := right
  14.  
  15. int dx[] = {-1, 0, 1, 0};
  16. int dy[] = {0, -1, 0, 1};
  17.  
  18. int32_t main(){
  19.     for(int i = 0; i <= 2; ++i){
  20.         for(int j = 0; j <= 2; ++j){
  21.             sides[i][j] = 0;
  22.             char num;
  23.             cin >> num;
  24.             x[num-'0'] = i;
  25.             y[num-'0'] = j;
  26.         }
  27.     }
  28.     int side = 1;
  29.     for(int i = 0; i < 9; ++i){
  30.         char c;
  31.         for(int j = 0; j < 4; ++j){
  32.             cin >> c;
  33.             atk[i][j] = tonum(c);
  34.         }
  35.         swap(atk[i][2], atk[i][3]);
  36.         maze[x[i]][y[i]] = i;
  37.         sides[x[i]][y[i]] = side;
  38.         for(int j = 0; j < 4; ++j){
  39.             int nx = x[i]+dx[j];
  40.             int ny = y[i]+dy[j];
  41.             if(0 <= nx && nx <= 2 && 0 <= ny && ny <= 2 && sides[nx][ny] == -side && atk[i][j] >= atk[maze[nx][ny]][(j+2)%4]){
  42.                 sides[nx][ny] = side;
  43.             }
  44.         }
  45.         side = -side;
  46.     }
  47.     int cnt = 0;
  48.     for(int i = 0; i < 9; ++i){
  49.         if(sides[i/3][i%3] == 1)++cnt;
  50.     }
  51.     cout << cnt << '-' << 9-cnt << '\n';
  52.     return 0;
  53. }
RAW Paste Data