Pagini recente » Cod sursa (job #1463735) | Cod sursa (job #605488) | Cod sursa (job #636356) | Cod sursa (job #1298199) | Cod sursa (job #1903112)
#include <fstream>
#include <string>
using namespace std;
const int NMAX = 1000 + 5;
short freq[NMAX][NMAX][26];
string mat[NMAX];
short freqP[26];
int main()
{
ifstream cin("matrix.in");
ofstream cout("matrix.out");
int N, M;
cin >> N >> M;
for (int i = 1; i <= N; ++ i) {
cin >> mat[i];
mat[i] = " " + mat[i];
}
string pattern;
for (int i = 1; i <= M; ++ i) {
cin >> pattern;
for (auto it: pattern)
++ freqP[it - 'a'];
}
for (int i = 1; i <= N; ++ i) {
for (int j = 1; j <= N; ++ j) {
for (int k = 0; k < 26; ++ k)
freq[i][j][k] = freq[i - 1][j][k] - freq[i - 1][j - 1][k] + freq[i][j - 1][k];
++ freq[i][j][mat[i][j] - 'a'];
}
}
int ans = 0;
for (int i = 1; i + M - 1 <= N; ++ i)
for (int j = 1; j + M - 1 <= N; ++ j) {
bool ok = true;
for (int k = 0; k < 26 && ok; ++ k) {
int aux = freq[i + M - 1][j + M - 1][k] + freq[i - 1][j - 1][k] -
freq[i + M - 1][j - 1][k] - freq[i - 1][j + M - 1][k];
if (aux != freqP[k])
ok = false;
}
ans += ok;
}
cout << ans << '\n';
return 0;
}