Pagini recente » Cod sursa (job #1169020) | Cod sursa (job #2305782) | Cod sursa (job #3217970) | Cod sursa (job #815961) | Cod sursa (job #3266216)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("matrix.in");
ofstream cout("matrix.out");
int n, m, s[1001][1001], f[27], cnt;
bool sol[1001][1001];
char mat[1001][1001], a;
int main() {
cin>>n>>m;
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
cin>>mat[i][j], sol[i][j]= 1;
for (int i=1; i<=m; i++)
for (int j=1; j<=m; j++)
cin>>a, f[a-'a' +1]++;
int nr= 0;
for (char k='a'; k<='z' and nr<m*m; k++)
if (f[k-'a' +1])
{
nr++;
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
s[i][j]= 0;
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
{
s[i][j]= s[i-1][j] + s[i][j-1] - s[i-1][j-1];
if (mat[i][j]==k)
s[i][j]++;
}
for (int i=1; i<=n-m+1; i++)
for (int j=1; j<=n-m+1; j++)
{
int i2= i+m-1, j2=j+m-1;
int sum= s[i2][j2] - s[i-1][j2] - s[i2][j-1] + s[i-1][j-1];
if (sum!=f[k-'a' +1])
sol[i][j]= 0;
}
}
else
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
if (mat[i][j]==k)
sol[i][j]= 0;
for (int i=1; i<=n-m+1; i++)
for (int j=1; j<=n-m+1; j++)
if (sol[i][j])
cnt++;
cout<< cnt;
return 0;
}