Pagini recente » Cod sursa (job #1823899) | Cod sursa (job #3202333) | Cod sursa (job #1145215) | Cod sursa (job #46895) | Cod sursa (job #492218)
Cod sursa(job #492218)
#include<cstdio>
const int N=1005;
const int M=30;
int nr,n,m,fr[M],spart[N][N];
bool ok[N][N];
char a[N][N],ss[N];
void citire()
{
freopen("matrix.in","r",stdin);
freopen("matrix.out","w",stdout);
scanf("%d%d\n",&n,&m);
for (int i=1;i<=n;++i)
gets(a[i]+1);
for (int i=1;i<=m;++i)
{
gets(ss);
for (int i=0;i<m;++i)
fr[ss[i]-'a'+1]++;
}
}
void init()
{
for (int i=m;i<=n;++i)
for (int j=m;j<=n;++j)
ok[i][j]=true;
}
void initspart()
{
for (int i=1;i<=n;++i)
for (int j=1;j<=n;++j)
spart[i][j]=0;
}
int main ()
{
citire();
init();
for (int k=1;k<=26;k++)
{
initspart();
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
{
spart[i][j]=spart[i-1][j]+spart[i][j-1]-spart[i-1][j-1];
if (a[i][j]-'a'+1==k)
++spart[i][j];
}
for (int i=m;i<=n;i++)
for (int j=m;j<=n;j++)
if (ok[i][j] && spart[i][j]-spart[i-m][j]-spart[i][j-m]+spart[i-m][j-m]!=fr[k])
ok[i][j]=0;
}
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (ok[i][j])
++nr;
printf("%d\n",nr);
return 0;
}