Cod sursa(job #10602)
#include <stdio.h>
long v[1024][1024][26], x[26];
int main()
{
freopen("matrix.in","r",stdin);
freopen("matrix.out","w",stdout);
register long i,j,k, n,m, T=0;
register char c;
scanf("%ld%ld\n", &n,&m);
for(i=1;i<=n;++i)
{
for(j=1;j<=n;++j)
{
scanf("%c", &c);
printf("%c", c);
for(k=0;k<=25;++k)
v[i][j][k]=v[i][j-1][k]+v[i-1][j][k]-v[i-1][j-1][k];
++v[i][j][c-97];
}
}
for(i=1;i<=m;++i)
{
for(j=1;j<=m;++j)
{
scanf("%c", &c);
printf("%c", c);
++x[c-97];
}
}
for(i=m;i<=n;++i)
for(j=m;j<=n;++j)
{
c=1;
for(k=0;k<=24;++k)
if(x[k]!=v[i][j][k]-v[i-m][j][k]-v[i][j-m][k]+v[i-m][j-m][k])
{
c=0;
break;
}
T+=c;
}
printf("%ld\n", T);
return 0;
}