Pagini recente » Cod sursa (job #1389256) | Borderou de evaluare (job #2772068) | Cod sursa (job #1182750) | Cod sursa (job #160210) | Cod sursa (job #2970397)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("matrix.in");
ofstream fout("matrix.out");
int s[1001][1001];
char a[1001][1001];
int n, m, res[26];
bitset <26> ok[1001][1001];
int main()
{
fin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
fin >> a[i][j];
for (int i = 1; i <= m; i++)
for (int j = 1; j <= m; j++)
{
char c;
fin >> c;
res[c - 'a']++;
}
for (short k = 0; k < 26; k++)
{
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
s[i][j] = (a[i][j] == 'a' + k) + s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1];
for (int i = 1; i <= n - m + 1; i++)
for (int j = 1; j <= n - m + 1; j++)
ok[i][j][k] = (s[i + m - 1][j + m - 1] - s[i - 1][j + m - 1] - s[i + m - 1][j - 1] + s[i - 1][j - 1] == res[k]);
}
int cnt = 0;
for (int i = 1; i <= n - m + 1; i++)
for (int j = 1; j <= n - m + 1; j++)
cnt += ok[i][j].all();
fout << cnt;
return 0;
}