Cod sursa(job #3357606)

Utilizator EduardDobrescuEduard Dobrescu Cristian Gabriel EduardDobrescu Data 11 iunie 2026 22:09:15
Problema Matrix Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#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() {
    if 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;
}