Pagini recente » Cod sursa (job #1614720) | Cod sursa (job #3247808) | Cod sursa (job #481839) | Cod sursa (job #214347) | Cod sursa (job #3304883)
#include <bits/stdc++.h>
#define NMAX 1000
#define MMAX 26
#define ll long long
using namespace std;
ifstream fin("matrix.in");
ofstream fout("matrix.out");
int n, m, ans;
char c, a[NMAX + 2][NMAX + 2];
int ok[NMAX + 2][NMAX + 2], sp[NMAX + 2][NMAX + 2], fr[MMAX];
int main() {
ios_base::sync_with_stdio(false);
fin.tie(NULL);
fout.tie(NULL);
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++) {
fin >> c;
fr[c - 'a']++;
}
}
for (int i = m; i <= n; i++) {
for (int j = m; j <= n; j++) {
ok[i][j] = 1;
}
}
for (int lit = 0; lit <= 25; lit++) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
sp[i][j] = (a[i][j] - 'a' == lit ? 1 : 0) + sp[i - 1][j] + sp[i][j - 1] - sp[i - 1][j - 1];
}
}
for (int i = m; i <= n; i++) {
for (int j = m; j <= n; j++) {
if (sp[i][j] - sp[i - m][j] - sp[i][j - m] + sp[i - m][j - m] != fr[lit]) {
ok[i][j] = 0;
}
}
}
}
for (int i = m; i <= n; i++) {
for (int j = m; j <= n; j++) {
ans += ok[i][j];
}
}
fout << ans;
return 0;
}