Pagini recente » Cod sursa (job #1744972) | Cod sursa (job #1503872) | Cod sursa (job #532568) | Cod sursa (job #1394337) | Cod sursa (job #3357607)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("matrix.in");
ofstream fout("matrix.out");
int M, N;
char genom[1005][1005];
int virus_frecv[26];
int sume[1005][1005];
int pot_lit[1005][1005];
int main() {
fin >> M >> N;
for(int i = 1; i <= M; i++)
for(int j = 1; j <= M; j++)
fin >> genom[i][j];
char c;
for(int i = 1; i <= N; i++)
for(int j = 1; j <= N; j++){
fin >> c;
virus_frecv[c - 'a']++;
}
int litere_tinta = 26;
for(int l = 0; l < 26; l++){
int frecv_cautata = virus_frecv[l];
for(int i = 1; i <= M; i++)
for(int j = 1; j <= M; j++){
int activ = (genom[i][j] - 'a' == l) ? 1 : 0;
sume[i][j] = activ + sume[i-1][j] + sume[i][j-1] - sume[i-1][j-1];
}
for(int i = N; i <= M; i++)
for(int j = N; j <= M; j++){
int tot_lit = sume[i][j] - sume[i-N][j] - sume[i][j-N] + sume[i-N][j-N];
if (tot_lit == frecv_cautata)
pot_lit[i][j]++;
}
}
int total_virusi = 0;
for(int i = N; i <= M; i++)
for(int j = N; j <= M; j++){
if(pot_lit[i][j] == litere_tinta)
total_virusi++;
}
fout << total_virusi;
return 0;
}