Pagini recente » Cod sursa (job #342881) | Cod sursa (job #2268626) | Cod sursa (job #2685703) | Cod sursa (job #2267220) | Cod sursa (job #844759)
Cod sursa(job #844759)
#include<cstdio>
#define NMAX 1000+10
#define MMAX 1000+10
#define SMAX 26+3
using namespace std;
char om[MMAX][MMAX],vr[NMAX][NMAX],*p;
int m,n,i,j,virus[SMAX],letter,T[MMAX][MMAX],sol;
bool check[MMAX][MMAX];
int main()
{
freopen("matrix.in","r",stdin);
freopen("matrix.out","w",stdout);
scanf("%d%d",&m,&n);
for(i=1;i<=m;i++)
{
scanf("%s",om[i]+1);
for(j=1;j<=m;j++) check[i][j]=1;
}
for(i=1;i<=n;i++)
{
scanf("%s",vr[i]+1);
for(p=vr[i]+1;*p;p++)
virus[*p-'a'+1]++;
}
for(letter=1;letter<=26;letter++)
{
for(i=1;i<=m;i++)
{
for(p=om[i]+1,j=1;*p;p++,j++)
{
T[i][j]=T[i-1][j]-T[i-1][j-1]+T[i][j-1]+(*p-'a'+1==letter);
if(i>=n&&j>=n)
{
if(T[i][j]-T[i-n][j]-T[i][j-n]+T[i-n][j-n]!=virus[letter]) check[i][j]=0;
if(letter==26 && check[i][j]==1) sol++;
}
}
}
}
printf("%d\n",sol);
return 0;
}