Cod sursa(job #3266201)

Utilizator ana_maria_772Toc Ana-Maria ana_maria_772 Data 6 ianuarie 2025 14:41:49
Problema Matrix Scor 75
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
#include <cstring>
using namespace std;

ifstream cin("matrix.in");
ofstream cout("matrix.out");

short n, m, cnt, x, fv[27], i, j, k, nr;
char v;
struct matrice {
    short s[1001][1001];
} t[27];

int main() {
    cin>>n>>m;
    for (i=1; i<=n; i++)
        for (j=1; j<=n; j++)
        {
            cin>>v;
            x= v- 'a' +1;
            t[x].s[i][j]=1;
        }
    for (i=1; i<=m; i++)
        for (j=0; j<m; j++)
        {
            cin>>v;
            fv[v-'a'+1]++;
        }

    nr= 0;
    for (k='a'-'a'+1; k<='z' - 'a'+1 and nr<m*m; k++)
    {
        if (fv[k])
            nr++;
        for (i=1; i<=n; i++)
            for (j=1; j<=n; j++)
                t[k].s[i][j]+= (t[k].s[i-1][j]+t[k].s[i][j-1]-t[k].s[i-1][j-1]);
    }
    
    for (i=1; i<n-m+2; i++)
        for (j=1; j<n-m+2; j++)
        {    
            nr=0;
	    short i2= i+m-1, j2= j+m-1;
            bool ok=1;
            for (k='a'-'a' +1; k<='z'-'a' +1 and nr<m*m; k++)
            {
                short sum= t[k].s[i2][j2] - t[k].s[i-1][j2] - t[k].s[i2][j-1] + t[k].s[i-1][j-1];
                if (sum!= fv[k])
                    ok=0;
                if (fv[k])
                    nr++;
            }
            if (ok)
                cnt++;
        }
    cout<<cnt;
    return 0;
}