Pagini recente » Cod sursa (job #1218271) | Cod sursa (job #553280) | Cod sursa (job #3147369) | Cod sursa (job #1878639) | Cod sursa (job #2358249)
#include<fstream>
#include<cstring>
using namespace std;
ifstream fin("matrix.in");
ofstream fout("matrix.out");
int n,m,sol;
int ok[1005][1005],s[1005][1005],f[100];
char a[1005][1005],b[1005][1005],maxim;
int main(){
fin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
fin>>a[i][j];
ok[i][j]=1;
}
}
for(int i=1;i<=m;i++){
for(int j=1;j<=m;j++){
fin>>b[i][j];
f[b[i][j]-'a'+1]++;
if(maxim<b[i][j]){
maxim=b[i][j];
}
}
}
for(int t=1;t<=maxim-'a'+1;t++){
memset(s,0,sizeof(s));
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
s[i][j]=s[i][j-1]+s[i-1][j]-s[i-1][j-1];
if(a[i][j]-'a'+1==t){
s[i][j]++;
}
}
}
for(int i=m;i<=n;i++){
for(int j=m;j<=n;j++){
if((s[i][j]-s[i-m][j]-s[i][j-m]+s[i-m][j-m])!=f[t]){
ok[i][j]=0;
}
}
}
}
for(int i=m;i<=n;i++){
for(int j=m;j<=n;j++){
sol+=ok[i][j];
}
}
fout<<sol<<"\n";
return 0;
}