Guest User

Untitled

a guest
Jun 22nd, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstring>
  3.  
  4. int N, g[605][605];
  5. char grid[605][605];
  6.  
  7. int dx[4] = { 1, 0, 0,-1};
  8. int dy[4] = { 0, 1,-1, 0};
  9.  
  10. void read() {
  11.     scanf("%d", &N);
  12. }
  13.  
  14. bool isValid(int i, int j, int k, int n) {
  15.     return i+dx[k] >= 0 && i+dx[k] < n && j+dy[k] >= 0 && j+dy[k] < n;
  16. }
  17.  
  18. void process(int caso) {
  19.     memset(g, 0, sizeof(g));
  20.     int n;
  21.     scanf("%d", &n);
  22.  
  23.     for (int i = 0; i < n; i++) scanf("%s", grid[i]);
  24.  
  25.     for (int i = 0; i < n; i++)
  26.         for (int j = 0; j < n; j++) if (grid[i][j] == '#') {
  27.             g[i][j] = 0;
  28.             for (int k = 0; k < 4; k++)
  29.                 if (isValid(i, j, k, n) && grid[i+dx[k]][j+dy[k]] == '#') g[i][j]++;
  30.         }
  31.  
  32.     int resp = 0;
  33.  
  34.     LOL: ;
  35.     for (int i = 1; i < 5; i++)
  36.         for (int j = 0; j < n; j++)
  37.             for (int k = 0; k < n; k++) {
  38.                 if (g[j][k] == i)
  39.                     for (int l = 0; l < 4; l++)
  40.                         if (isValid(j, k, l, n) && g[j+dx[l]][k+dy[l]]) {
  41.                             g[j][k] = g[j+dx[l]][k+dy[l]] = 0;
  42.                             grid[j][k] = grid[j+dx[l]][k+dy[l]] = '.';
  43.                             resp++;
  44.                             for (int m = 0; m < 4; m++) {
  45.                                 if (isValid(j, k, l, n) && g[j+dx[m]][k+dy[m]]) g[j+dx[m]][k+dy[m]]--;
  46.                                 if (j+dx[l]+dx[m] >= 0 && j+dx[l]+dx[m] < n && k+dy[l]+dy[m] >= 0 && k+dy[l]+dy[m] < n)
  47.                                     if (g[j+dx[l]+dx[m]][k+dy[l]+dy[m]]) g[j+dx[l]+dx[m]][k+dy[l]+dy[m]]--;
  48.                             }
  49.                             goto LOL;
  50.                         }
  51.  
  52.             }
  53.  
  54.     printf("Case %d: %d\n", caso, resp);
  55. }
  56.  
  57. int main() {
  58.     //freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout);
  59.     read();
  60.     for (int i = 1; i <= N; i++) process(i);
  61.     return 0;
  62. }
Add Comment
Please, Sign In to add comment