Pagini recente » Cod sursa (job #2204505) | Cod sursa (job #2702916) | Cod sursa (job #301458) | Cod sursa (job #1103361) | Cod sursa (job #904240)
Cod sursa(job #904240)
#include<cstdio>
const int NM=1002;
char a[NM][NM],b[NM][NM];
int c0[27],l0[27],t[27],g[27],t0[27],NR;
int d[NM][27];
void verify(int a[]){
for(int i=0;i<26;++i)if(t[i]!=g[i])return;
++NR;
}
int main(){
freopen("matrix.in","r",stdin);
freopen("matrix.out","w",stdout);
int N,M,i,j,q,k;
scanf("%d%d\n",&N,&M);
for(i=1;i<=N;++i)scanf("%s",a[i]);
for(i=1;i<=M;++i)scanf("%s",b[i]);
for(i=1;i<=M;++i)
for(j=0;j<M;++j){ g[b[i][j]-'a']++; t[a[i][j]-'a']++; }
for(i=1;i<=N;++i)
for(j=1;j<=M;++j)d[i][a[i][j]-'a']++;
for(i=0;i<26;++i) t0[i]=t[i];
int *T=t,*T0=t0,aux;
for(i=1;i<=N-M+1;++i)
{
if(i!=1){
for(q=0;q<26;++q)t[q]=t0[q];
for(q=0;q<26;++q)t[q]+=(d[i+M-1][q]-d[i-1][q]);
for(q=0;q<26;++q)t0[q]=t[q];
}
verify(T);
for(j=M;j<N;++j)
{
for(k=i;k<=M+i-1;++k)
{ T[a[k][j]-'a']++; T[a[k][j-M]-'a']--; }
verify(T);
}
}
printf("%d",NR);
return 0;
}