1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| #include <cstdio> typedef long long ll; int n,m,t,p,q; char map[1010][1010],pat[60][60]; ll ro[1010][1010],mat[60]; int main() { int cas=0; while (scanf("%d%d%d%d%d",&n,&m,&t,&p,&q),n) { for (int i=0;i<n;i++) scanf("%s",map[i]); ll mask=(1LL<<q)-1; for (int i=0;i<n;i++) { ll tmp=0; for (int j=0;j<m;j++) ro[i][j]=tmp=((tmp<<1)|(map[i][j]=='*'))&mask; } int ans=0; WCON: while (t--) { for (int i=0;i<p;i++) scanf("%s",pat[i]); for (int i=0;i<p;i++) { ll tmp=0; for (int j=0;j<q;j++) tmp=(tmp<<1)|(pat[i][j]=='*'); mat[i]=tmp; } for (int i=p-1;i<n;i++) { for (int j=q-1;j<m;j++) if (ro[i][j]==mat[p-1]) { int k=0; while (k<p&&ro[i-k][j]==mat[p-1-k]) k++; if (k==p) { ans++; goto WCON; } } } } printf("Case %d: %d\n",++cas,ans); } return 0; }
|