Pagini recente » Cod sursa (job #1401971) | Cod sursa (job #188907) | Cod sursa (job #791166) | Cod sursa (job #2290216) | Cod sursa (job #2767861)
#include <fstream>
#include <vector>
#include <iostream>
using namespace std;
int n, m;
int fr[26];
int cur[26];
unsigned short dp[1001][1001][26];
void read() {
int i, j, k;
char ch;
ifstream f("matrix.in");
f >> n >> m;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++) {
f >> ch;
dp[i][j][ch - 'a']++;
}
for (i = 1; i <= m; i++)
for (j = 1; j <= m; j++) {
f >> ch;
fr[ch - 'a']++;
}
f.close();
}
int cnt;
void solve() {
int i, j, k;
bool ok;
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;
}