Pagini recente » Cod sursa (job #2656334) | Cod sursa (job #2975723) | Cod sursa (job #428800) | Cod sursa (job #1269903) | Cod sursa (job #492939)
Cod sursa(job #492939)
#include<cstdio>
int m,n,nr,x[31],xx[31],xau[31];
char ch,c1[1001][1001],c2[1001][1001];
int main()
{
freopen("matrix.in","r",stdin);
freopen("matrix.out","w",stdout);
scanf("%d%d",&m,&n);
scanf("\n");
int i,j;
for(i=1;i<=m;i++)
gets(c1[i]+1);
for(i=1;i<=n;i++)
gets(c2[i]+1);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
x[c2[i][j]-96]++; //virusul
for(i=1;i<=m-n+1;i++)
for(j=1;j<=m-n+1;j++)
xau[c1[i][j]-96]++; //x de inceput, matricea care are coltul st-sus in (i,0)
nr=0; //xx=matricea propriu-zisa, pentru calculare. initial este egala cu xau, si se adauga+scad coloane.
for(i=1;i<=m-n+1;i++)
{
if(i>1)
{
for(j=1;j<=m-n+1;j++)
{
xau[c1[i-1][j]-96]--;
xau[c1[i+n-1][j]-96]++;
}
}
for(j=1;j<=m-n+1;j++)
{
if(j==1)
{
for(int jj=1;jj<=26;jj++)
xx[jj]=xau[jj];
}
else
{
for(int ii=i;ii<=i+n-1;ii++)
{
xx[c1[ii][j-1]-96]--;
xx[c1[ii][j-1+n]-96]++;
}
}
int da=1;
for(int jj=1;jj<=26;jj++)
if(xx[jj]!=x[jj])
{
da=0;
break;
}
if(da)
nr++;
}
}
printf("%d\n",nr);
return 0;
}