Pagini recente » Cod sursa (job #3323638) | Cod sursa (job #3332689) | Cod sursa (job #3313654) | Cod sursa (job #3322524) | Cod sursa (job #3337666)
#include <fstream>
#include <climits>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream cin("matrix.in");
ofstream cout("matrix.out");
// declaring outside main for zeros
int frB[27],d[1005][1005],ok[1005][1005];
char a[1005][1005],x;
int main()
{
/// declaring
int n, m,sol=0,i,j;
////reading
cin >> m >> n;
for ( i=1;i<=m;i++){
for (j=1;j<=m;j++){
cin >> a[i][j];
}
}
for ( i=1;i<=n;i++){
for (j=1;j<=n;j++){
cin >> x;
frB[x-'a']++;
}
}
//initialize
for ( i=n;i<=m;i++){
for (j=n;j<=m;j++){
ok[i][j]=1;
}
}
// algorithm
for (x='a';x<='z';x++){
//build the frequecy matrix
for (i=1;i<=m;i++){
for (j=1;j<=m;j++){
d[i][j]=d[i-1][j]+d[i][j-1]-d[i-1][j-1]+(x==a[i][j]);
}
}
for (i=n;i<=m;i++){
for (j=n;j<=m;j++){
if (frB[x-'a']!=d[i][j]-d[i-n][j]-d[i][j-n]+d[i-n][j-n]){
ok[i][j]=0;
}
}
}}
for (i=n;i<=m;i++){
for (j=n;j<=m;j++){
sol += ok[i][j];
}
}
cout << sol;
}
// reconstructing and outputting
//test
/*for ( i=1;i<=m;i++){
for (j=1;j<=m;j++){
cout << ok[i][j]<< " ";
}
cout << endl;
}
cout << endl;
for ( i=0;i<26;i++){
cout << frB[i]<<" ";
}
*/