Pagini recente » Cod sursa (job #890350) | Cod sursa (job #642595) | Cod sursa (job #2777969) | Cod sursa (job #2888824) | Cod sursa (job #3165466)
#include <iostream>
#include <fstream>
#include <deque>
#include <algorithm>
#include <cmath>
#include <vector>
#include <climits>
#define DIM 1000
using namespace std;
//ifstream f("in.in");
//ofstream g("out.out");
ifstream f("matrix.in");
ofstream g("matrix.out");
int n,m,sol;
bool ok[DIM+5][DIM+5];
int dp[DIM+5][DIM+5],a[DIM+5][DIM+5],v[30];
char c;
signed main()
{
f>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
f>>c;
a[i][j] = c-'a'+1;
}
}
for(int i=1;i<=m;i++){
for(int j=1;j<=m;j++){
f>>c;
v[c-'a'+1]++;
}
}
/*for(int i=1;i<=4;i++){
cout<<v[i]<<" ";
}
cout<<'\n'<<'\n';
for(int k=1;k<=4;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<a[i][j][k]<<" ";
}
cout<<'\n';
}
cout<<'\n';
}*/
for(int i=m;i<=n;i++){
for(int j=m;j<=n;j++){
ok[i][j] = 1;
}
}
for(int k=1;k<=26;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
dp[i][j] = dp[i][j-1] + dp[i-1][j] - dp[i-1][j-1] + (a[i][j] == k);
}
}
for(int i=m;i<=n;i++){
for(int j=m;j<=n;j++){
if(dp[i][j] - dp[i][j-m] - dp[i-m][j] + dp[i-m][j-m] != v[k]){
ok[i][j] = 0;
}
}
}
}
for(int i=m;i<=n;i++){
for(int j=m;j<=n;j++){
if(ok[i][j] == 1){
sol++;
}
}
}
g<<sol;
return 0;
}