Pagini recente » Cod sursa (job #2858785) | Cod sursa (job #1902081) | Cod sursa (job #2944573) | Cod sursa (job #197198) | Cod sursa (job #2767857)
#include <fstream>
#include <iostream>
using namespace std;
int n, m;
char a[1001][1001];
int fr[26];
int cur[26];
void read() {
int i, j;
char ch;
ifstream f("matrix.in");
f >> n >> m;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
f >> a[i][j];
for (i = 1; i <= m; i++)
for (j = 1; j <= m; j++) {
f >> ch;
fr[ch - 'a']++;
}
f.close();
}
int cnt;
int dp[1001][1001][26];
void solve() {
int i, j, k;
bool ok;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
dp[i][j][a[i][j] - 'a']++;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
for (k = 0; k <= 25; k++)
dp[i][j][k] = dp[i][j][k] + dp[i - 1][j][k] + dp[i][j - 1][k] - dp[i - 1][j - 1][k];
for (i = m; i <= n; i++)
for (j = m; j <= n; j++) {
ok = 1;
for (k = 1; k <= 25 && ok; k++) {
cur[k] = dp[i][j][k] - dp[i - m][j][k] - dp[i][j - m][k] + dp[i - m][j - m][k];
if (cur[k] != fr[k])
ok = 0;
}
if (ok)
cnt++;
}
}
void output() {
ofstream g("matrix.out");
g << cnt;
g.close();
}
int main() {
read();
solve();
output();
return 0;
}