Cod sursa(job #3266216)

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

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

int n, m, s[1001][1001], f[27], cnt;
bool sol[1001][1001];
char mat[1001][1001], a;

int main() {
    cin>>n>>m;
    for (int i=1; i<=n; i++)
        for (int j=1; j<=n; j++)
            cin>>mat[i][j], sol[i][j]= 1;
    for (int i=1; i<=m; i++)
        for (int j=1; j<=m; j++)
            cin>>a, f[a-'a' +1]++;
    int nr= 0;
    for (char k='a'; k<='z' and nr<m*m; k++)
        if (f[k-'a' +1])
        {
            nr++;
            for (int i=1; i<=n; i++)
                for (int j=1; j<=n; j++)
                    s[i][j]= 0;
            
            for (int i=1; i<=n; i++)
                for (int j=1; j<=n; j++)
                {
                    s[i][j]= s[i-1][j] + s[i][j-1] - s[i-1][j-1];
                    if (mat[i][j]==k)
                        s[i][j]++;
                }
            for (int i=1; i<=n-m+1; i++)
                for (int j=1; j<=n-m+1; j++)
                {
                    int i2= i+m-1, j2=j+m-1;
                    int sum= s[i2][j2] - s[i-1][j2] - s[i2][j-1] + s[i-1][j-1];
                    if (sum!=f[k-'a' +1])
                        sol[i][j]= 0;
                }   
        }
        else
            for (int i=1; i<=n; i++)
                for (int j=1; j<=n; j++)
                    if (mat[i][j]==k)
                        sol[i][j]= 0; 
    for (int i=1; i<=n-m+1; i++)
        for (int j=1; j<=n-m+1; j++)
            if (sol[i][j])
                cnt++;
    cout<< cnt;
    return 0;
}