Pagini recente » Cod sursa (job #1358068) | Cod sursa (job #2942238) | Cod sursa (job #2184372) | Cod sursa (job #1423869) | Cod sursa (job #1065621)
#include <cstdio>
#include <cstring>
using namespace std;
FILE *f=fopen("matrix.in","r");
FILE *g=fopen("matrix.out","w");
int fr[300],m,n,L,ap[1011][1011],nr;
char ch,a[1011][1011],s[1011];
int ok[1011][1011];
int main(void){
register int i,j;
fscanf(f,"%d %d",&m,&n);
for(i=1;i<=m;i++){
fscanf(f,"%s",a[i]+1);
}
for(i=1;i<=n;i++){
fscanf(f,"%s",s+1);
L=strlen(s+1);
for(j=1;j<=L;j++)
fr[s[j]]++;
}
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
ok[i][j]=1;
for(ch='a';ch<='z';ch++){
for(i=1;i<=m;i++)
for(j=1;j<=m;j++){
ap[i][j]=ap[i][j-1]+ap[i-1][j]-ap[i-1][j-1]+(a[i][j]==ch?1:0);
if(i>=n && j>=n)
if(ap[i][j]+ap[i-n][j-n]-ap[i-n][j]-ap[i][j-n]!=fr[ch])
ok[i][j]=0;
}
}
nr=m*m-(n-1)*m-(n-1)*m+(n-1)*(n-1);
for(i=m;i>=n;i--){
for(j=m;j>=n;j--){
if (ok[i][j] == 0)
nr--;
}
}
fprintf(g,"%d",nr);
fclose(f);
fclose(g);
return 0;
}