Cod sursa(job #2956656)

Utilizator e_ggIonescu Dorian e_gg Data 20 decembrie 2022 08:45:53
Problema Matrix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("matrix.in");
ofstream g("matrix.out");

const int nmax = 1007;

int v[nmax][nmax], sp[nmax][nmax];
long long spat[nmax][nmax];
long long n, m, s, spa, curs, curspat, sol, x;
char c;
int main()
{
    f >> n >> m;
    for ( int i = 1; i <= n; i++ ) {
        f.get();
        for ( int j = 1; j <= n; j++ ) {
            f.get(c);
            v[i][j] = c - 'a' + 1;
            sp[i][j] = sp[i - 1][j] + sp[i][j - 1] - sp[i - 1][j - 1] + v[i][j];
            spat[i][j] = spat[i - 1][j] + spat[i][j - 1] - spat[i - 1][j - 1] + v[i][j] * v[i][j];
        }
    }
    for ( int i = 1; i <= m; i++ ) {
        f.get();
        for ( int j = 1; j <= m; j++ ) {
            f.get(c);
            x = c - 'a' + 1;
            s += x;
            spa += x * x;
        }
    }
    for ( int i = m; i <= n; i++ )
        for ( int j = m; j <= n; j++ ) {
            curs = sp[i][j] - sp[i - m][j] - sp[i][j - m] + sp[i - m][j - m];
            curspat = spat[i][j] - spat[i - m][j] - spat[i][j - m] + spat[i - m][j - m];
            if ( curs == s && curspat == spa )
                sol++;
        }
    g << sol << '\n';
    f.close();
    g.close();
    return 0;
}