#include #include #define N 10000000 int pole[1000][1000]; int top[1000]; int R, C; struct Bod { int r; int c; }; typedef struct Bod bod; bod fronta[N]; long long first, last; int max(); int main() { int Z; int i, j; int r, c; int kam, body; char znak; int m; scanf("%d", &Z); while (Z--) { scanf("%d %d", &C, &R); body = 0; kam = R*C; for (i=0; i<=R+1; i++) for (j=0; j<=C+1; j++) pole[i][j] = 0; for (i=R; i>0; i--) { for (j=1; j<=C; j++) { scanf("%c", &znak); while (znak == ' ' || znak == '\t' || znak == '\n') scanf("%c", &znak); pole[i][j] = znak - 'A' + 1; } } for (j=1; j<=C; j++) top[j] = R; scanf("%d", &m); while (m--) { scanf("%d %d", &c, &r); if (oktah(r,c)) { i = oznackomp(r,c); body += (i-2)*(i-2); kam -= i; /* slisuj(); sloupce();/**/ vypis();/**/ } /* else printf("not ok\n");/**/ if (!kam) body += 1000; } printf("Game over!\n"); printf("Score dosazene v teto hre je %d bodu.\n", body); printf("Byli bychom radi, kdybyste si zahrali jeste jednou.\n"); printf("Prejete si hrat znovu?\n"); printf("Prijemnou zabavu Vam preje firma ACMTENDO.\n"); } return 0; } int oktah(int r, int c) { int b; b = pole [r][c]; if (!b) return 0; if (b == pole[r-1][c]) return 1; if (b == pole[r+1][c]) return 1; if (b == pole[r][c-1]) return 1; if (b == pole[r][c+1]) return 1; return 0; } void zarad(int r, int c) { last++; last %= N; fronta[last].r = r; fronta[last].c = c; pole[r][c] = - pole[r][c]; printf("(%d, %d)", r, c); } int prober(int r, int c) { int s; int b; b = abs(pole[r][c]); s = 0; if (b == pole[r-1][c]) { zarad(r-1, c); s++; } if (b == pole[r+1][c]) { zarad(r+1, c); s++; } if (b == pole[r][c-1]) { zarad(r, c-1); s++; } if (b == pole[r][c+1]) { zarad(r, c+1); s++; } pole[r][c] = 0; return s; } int oznackomp(int r, int c) { int suma; last = -1; first = 0; zarad(r,c); suma = 1; while (last >= first) { suma += prober(fronta[first].r, fronta[first].c); first ++; first %= N; } return suma; } int slisuj() { int a, b, c; for (c = 1; c<=C; c++) { a = b = 1; /* printf("%d0; i--) { for (j=1; j<=C; j++) printf("%c", 'A' + pole[i][j] - 1); printf("\n"); } printf("\n"); return 0; } int max(int a, int b) { if (a