Advertisement
mickypinata

GCJ2020-1A3: Square Dance

Apr 10th, 2020
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.34 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. #define lli long long
  6. #define pii pair<int, int>
  7. #define r first
  8. #define c second
  9.  
  10. /// U R D L
  11. pii ctrl[4] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
  12. vector<vector<int>> board;
  13. int q, row, col;
  14. lli sum;
  15.  
  16. int main(){
  17.  
  18.     int x;
  19.     bool change;
  20.  
  21.     scanf("%d", &q);
  22.     for(int k = 1; k <= q; ++k){
  23.         scanf("%d %d", &row, &col);
  24.         board.assign(row + 2, vector<int>(col + 2, 0));
  25.         for(int i = 1; i <= row; ++i){
  26.             for(int j = 1; j <= col; ++j){
  27.                 scanf("%d", &x);
  28.                 board[i][j] = x;
  29.             }
  30.         }
  31.  
  32.         sum = 0;
  33.         change = true;
  34.         while(change){
  35.             change = false;
  36.             vector<pii> fail;
  37.             for(int i = 1; i <= row; ++i){
  38.                 for(int j = 1; j <= col; ++j){
  39.                     sum += board[i][j];
  40.                     if(board[i][j] != 0){
  41.                         double mean;
  42.                         int add = 0;
  43.                         int cnt = 0;
  44.                         for(int d = 0; d < 4; ++d){
  45.                             int nr = i + ctrl[d].r;
  46.                             int nc = j + ctrl[d].c;
  47.                             if(nr > 0 && nr <= row && nc > 0 && nc <= col){
  48.                                 while(nr > 0 && nr <= row && nc > 0 && nc <= col){
  49.                                     if(board[nr][nc] != 0){
  50.                                         add += board[nr][nc];
  51.                                         ++cnt;
  52.                                         break;
  53.                                     }
  54.                                     nr += ctrl[d].r;
  55.                                     nc += ctrl[d].c;
  56.                                 }
  57.                             }
  58.                         }
  59.                         if(cnt != 0){
  60.                             mean = (double)add / (double)cnt;
  61.                             if(mean > board[i][j]){
  62.                                 fail.push_back({i, j});
  63.                                 change = true;
  64.                             }
  65.                         }
  66.                     }
  67.                 }
  68.             }
  69.             for(auto x : fail){
  70.                 board[x.r][x.c] = 0;
  71.             }
  72.         }
  73.         cout << "Case #" << k << ": " << sum << "\n";
  74.     }
  75.  
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement