Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstring>
- int N, g[605][605];
- char grid[605][605];
- int dx[4] = { 1, 0, 0,-1};
- int dy[4] = { 0, 1,-1, 0};
- void read() {
- scanf("%d", &N);
- }
- bool isValid(int i, int j, int k, int n) {
- return i+dx[k] >= 0 && i+dx[k] < n && j+dy[k] >= 0 && j+dy[k] < n;
- }
- void process(int caso) {
- memset(g, 0, sizeof(g));
- int n;
- scanf("%d", &n);
- for (int i = 0; i < n; i++) scanf("%s", grid[i]);
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++) if (grid[i][j] == '#') {
- g[i][j] = 0;
- for (int k = 0; k < 4; k++)
- if (isValid(i, j, k, n) && grid[i+dx[k]][j+dy[k]] == '#') g[i][j]++;
- }
- int resp = 0;
- LOL: ;
- for (int i = 1; i < 5; i++)
- for (int j = 0; j < n; j++)
- for (int k = 0; k < n; k++) {
- if (g[j][k] == i)
- for (int l = 0; l < 4; l++)
- if (isValid(j, k, l, n) && g[j+dx[l]][k+dy[l]]) {
- g[j][k] = g[j+dx[l]][k+dy[l]] = 0;
- grid[j][k] = grid[j+dx[l]][k+dy[l]] = '.';
- resp++;
- for (int m = 0; m < 4; m++) {
- if (isValid(j, k, l, n) && g[j+dx[m]][k+dy[m]]) g[j+dx[m]][k+dy[m]]--;
- 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)
- if (g[j+dx[l]+dx[m]][k+dy[l]+dy[m]]) g[j+dx[l]+dx[m]][k+dy[l]+dy[m]]--;
- }
- goto LOL;
- }
- }
- printf("Case %d: %d\n", caso, resp);
- }
- int main() {
- //freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout);
- read();
- for (int i = 1; i <= N; i++) process(i);
- return 0;
- }
Add Comment
Please, Sign In to add comment