Pagini recente » Cod sursa (job #1582307) | Cod sursa (job #2990090) | Cod sursa (job #2394731) | Cod sursa (job #3292370) | Cod sursa (job #3291525)
#include <iostream>
#include <fstream>
#include <bitset>
using namespace std;
const int N = 1e3 + 5;
char a[N][N];
int b[150], n, m, dp[N][N], sol;
bitset<N> ok[N];
void citire() {
ifstream fin("matrix.in");
fin >> m >> n;
char x[N];
for (int i = 1; i <= m; i++)for (int j = 1; j <= m; j++)fin >> a[i][j];
for (int i = 0; i <= n; i++) {
fin >> x;
for (int j = 0; x[j]; j++)b[x[j]]++;
}
fin.close();
for (int I = 'a'; I <= 'z'; I++) {
for (int i = 1; i <= m; i++)
for (int j = 1; j <= m; j++) {
dp[i][j] = (a[i][j] == I) + dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1];
}
for (int i = n; i <= m; i++)
for (int j = n; j <= m; j++) {
if (dp[i][j] - dp[i - n][j] - dp[i][j - n] + dp[i - n][j - n] == b[I])ok[i][j]=1;
}
}
for (int i = n; i <= m; i++)
for (int j = n; j <= m; j++) {
sol += ok[i][j];
}
ofstream fout("matrix.out");
fout << sol;
fout.close();
}
int main()
{
citire();
return 0;
}