#include #include #include #define MAX 300 char p[MAX][MAX]; int h[MAX]; int r,c; int smaz(int x, int y) { char d = p[y][x]; int s = 1; /* printf("maze x=%d y=%d %c %c\n",x,y,d,p[y][x]); */ p[y][x] = 0; if (y > h[x]) h[x] = y; if (x > 0 && p[y][x-1] == d) s+= smaz(x-1,y); if (x + 1 < c && p[y][x+1] == d) s += smaz(x+1,y); if (y > 0 && p[y-1][x] == d) s+=smaz(x,y-1); if (y + 1 < r && p[y+1][x] == d) s+=smaz(x,y+1); return s; } int odstran(int x, int y) { int s;int i, j, nn, l, ll, tt; if (x < 0 || y < 0 || x >= c || y >= r || p[y][x] == 0) return 0; for (i = 0; i < c; i++) h[i] = -1; s = smaz(x,y); /*return s;*/ for (ll =i= 0; i< c; i++){ if (h[i] == -1) { if (i != ll) { for (j = r - 1; j >= 0 && p[j][i] != 0; j--) {p[j][ll] = p[j][i];p[j][i] = 0;} } nn = 1; } else { for (j = r - 1; j >= h[i]; j--) {p[j][ll] = p[j][i];p[j][i] = 0;} for (nn = 0, l = j = h[i]; j>= 0; j--) if (p[j][i]){ nn = 1; /*tt = p[j][i];*/ p[l--][ll] = p[j][i]; p[j][i]= 0; } } if (nn) ll++; } return s; } void pr(){ int i, j; for (i= 0; i < r; i++) { for (j = 0; j < c; j++) if (p[i][j]) printf("%c",p[i][j]); else printf("-"); putchar ('\n'); } } int main(void) { int zad; int cel, s, t, x, y, i, k; scanf("%d",&zad); while (zad--) { scanf("%d %d\n",&c,&r); cel=r*c; for (i= 0; i < r; i++) { fgets(p[i],MAX,stdin); /* printf("nacetl ---'%s'--- \n",p[i]);*/ } /* for (i= 0; i < r; i++) { for (j = 0; j < c; j++) printf("%c",p[i][j]); putchar ('\n'); } pr(); */ k = s = 0; scanf ("%d",&t); for (i = 0; i < t; i++) { scanf("%d %d",&x,&y); x--; y = r - y; k = odstran(x,y); cel -=k; if (k > 0) s += (k - 2) * (k - 2); /* pr();/* printf("k = %d s = %d\n",k,s); */ } if (cel == 0) s += 1000; printf("Game over!\nScore dosazene v teto hre je %d bodu.\n",s); 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; }