Pagini recente » Cod sursa (job #1460663) | Cod sursa (job #1951019) | Cod sursa (job #2272482) | Cod sursa (job #1169396) | Cod sursa (job #3236957)
#include <fstream>
#include <vector>
#include <unordered_map>
using namespace std;
ifstream cin("matrix.in");
ofstream cout("matrix.out");
int n,m;
char x;
unordered_map<int,int> M;
int dp[1001][1001];
char a[1001][1001];
bool ok[1001][1001];
int suma(int i,int j,int x,int y)
{
return dp[x][y]-dp[x][j-1]-dp[i-1][y]+dp[i-1][j-1];
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
ok[i][j]=1;
}
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
{
cin>>x;
M[x-'a']++;
}
for(int l=0;l<26;l++)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
dp[i][j]=0;
if(a[i][j]==(char) (l+'a'))
dp[i][j]=1;
dp[i][j]=dp[i][j]+dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1];
}
for(int i=1;i<=n-m+1;i++)
for(int j=1;j<=n-m+1;j++)
{
int sum=suma(i,j,i+m-1,j+m-1);
if(M[l]!=sum)
ok[i][j]=0;
}
}
int ans=0;
for(int i=1;i<=n-m+1;i++)
for(int j=1;j<=n-m+1;j++)
if(ok[i][j])
ans++;
cout<<ans;
return 0;
}