mickypinata

TOI14: Space 1

Nov 20th, 2020 (edited)
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.68 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 1e3;
  5.  
  6. bool board[N + 10][N + 10];
  7. int row, col;
  8.  
  9. int main(){
  10.  
  11.     scanf("%d %d", &col, &row);
  12.     for(int i = 1; i <= row; ++i){
  13.         for(int j = 1; j <= col; ++j){
  14.             char tmpChar;
  15.             scanf(" %c", &tmpChar);
  16.             if(tmpChar == '1'){
  17.                 board[i][j] = true;
  18.             }
  19.         }
  20.     }
  21.  
  22.     int square, triangle, diamond;
  23.     square = triangle = diamond = 0;
  24.  
  25.     for(int i = 1; i <= row; ++i){
  26.         for(int j = 1; j <= col; ++j){
  27.             if(!board[i][j]){
  28.                 continue;
  29.             }
  30.             if(board[i][j + 1] && board[i + 1][j]){ // Square
  31.                 ++square;
  32.                 int sz = 0;
  33.                 int ti = i;
  34.                 while(board[ti][j]){
  35.                     ++sz;
  36.                     ++ti;
  37.                 }
  38.                 for(int ti = i; ti <= i + sz - 1; ++ti){
  39.                     for(int tj = j; tj <= j + sz - 1; ++tj){
  40.                         board[ti][tj] = false;
  41.                     }
  42.                 }
  43.             } else if(board[i + 1][j - 1] && board[i + 1][j] && !board[i + 1][j + 1]){ // Triangle Left
  44.                 ++triangle;
  45.                 int sz = 0;
  46.                 int ti = i;
  47.                 int tj = j;
  48.                 while(board[ti][tj]){
  49.                     ++sz;
  50.                     ++ti;
  51.                     --tj;
  52.                 }
  53.                 for(int ti = i; ti <= i + sz + sz - 2; ++ti){
  54.                     if(ti - i <= sz - 1){
  55.                         for(int tj = j - (ti - i); tj <= j; ++tj){
  56.                             board[ti][tj] = false;
  57.                         }
  58.                     } else {
  59.                         for(int tj = j - (i + sz + sz - 2 - ti); tj <= j; ++tj){
  60.                             board[ti][tj] = false;
  61.                         }
  62.                     }
  63.                 }
  64.             } else if(board[i + 1][j] && board[i + 1][j + 1] && !board[i + 1][j - 1]){ // Triangle Right
  65.                 ++triangle;
  66.                 int sz = 0;
  67.                 int ti = i;
  68.                 int tj = j;
  69.                 while(board[ti][tj]){
  70.                     ++sz;
  71.                     ++ti;
  72.                     ++tj;
  73.                 }
  74.                 for(int ti = i; ti <= i + sz + sz - 2; ++ti){
  75.                     if(ti - i <= sz - 1){
  76.                         for(int tj = j; tj <= j + (ti - i); ++tj){
  77.                             board[ti][tj] = false;
  78.                         }
  79.                     } else {
  80.                         for(int tj = j; tj <= j + (i + sz + sz - 2 - ti); ++tj){
  81.                             board[ti][tj] = false;
  82.                         }
  83.                     }
  84.                 }
  85.             } else if(board[i][j + 1] && board[i + 1][j + 1]){ // Triangle Down
  86.                 ++triangle;
  87.                 int sz = 0;
  88.                 int ti = i;
  89.                 int tj = j;
  90.                 while(board[ti][tj]){
  91.                     ++sz;
  92.                     ++ti;
  93.                     ++tj;
  94.                 }
  95.                 for(int ti = i; ti <= i + sz - 1; ++ti){
  96.                     for(int tj = j - (i - ti); tj <= (j + sz - 1) + (i + sz - 1 - ti); ++tj){
  97.                         board[ti][tj] = false;
  98.                     }
  99.                 }
  100.             } else if(board[i + 1][j - 1] && board[i + 1][j + 1]){ // Triangle Up / Diamond
  101.                 int sz = 0;
  102.                 int ti = i;
  103.                 int tj = j;
  104.                 while(board[ti][tj]){
  105.                     ++sz;
  106.                     ++ti;
  107.                     ++tj;
  108.                 }
  109.                 if(board[ti][tj - 2]){ // Diamond
  110.                     ++diamond;
  111.                     for(int ti = i; ti <= i + sz + sz - 2; ++ti){
  112.                         if(ti - i <= sz - 1){
  113.                             for(int tj = j - (ti - i); tj <= j + (ti - i); ++tj){
  114.                                 board[ti][tj] = false;
  115.                             }
  116.                         } else {
  117.                             for(int tj = j - (i + sz + sz - 2 - ti); tj <= j + (i + sz + sz - 2 - ti); ++tj){
  118.                                 board[ti][tj] = false;
  119.                             }
  120.                         }
  121.                     }
  122.                 } else { // Triangle Up
  123.                     ++triangle;
  124.                     for(int ti = i; ti <= i + sz - 1; ++ti){
  125.                         for(int tj = j - (ti - i); tj <= j + (ti - i); ++tj){
  126.                             board[ti][tj] = false;
  127.                         }
  128.                     }
  129.                 }
  130.             }
  131.         }
  132.     }
  133.  
  134.     cout << square << " " << diamond << " " << triangle;
  135.  
  136.     return 0;
  137. }
  138.  
Add Comment
Please, Sign In to add comment