Cod sursa(job #1802415)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 10 noiembrie 2016 11:58:30
Problema Matrix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <cstdio>

using namespace std;
int a[1001][1001];
int ok[1001][1001];
int f[30];
int b[1001][1001];
int main()
{
    FILE *fin=fopen ("matrix.in","r");
    FILE *fout=fopen ("matrix.out","w");
    int n,m,i,j,sol,k,ii,jj;
    char c;
    fscanf (fin,"%d%d\n",&n,&m);
    for (i=1;i<=n;i++){
        for (j=1;j<=n;j++){
            c=fgetc (fin);
            a[i][j]=c-'a';
        }
        fgetc (fin);
    }
    for (i=1;i<=m;i++){
        for (j=1;j<=m;j++){
            c=fgetc (fin);
            f[c-'a']++;
        }
        fgetc (fin);
    }
    for (k='a';k<='z';k++){
        for (i=1;i<=n;i++)
            for (j=1;j<=n;j++)
                b[i][j]=b[i-1][j]+b[i][j-1]-b[i-1][j-1]+(a[i][j]==k-'a');
        for (i=1;i<=n;i++)
            for (j=1;j<=n;j++){
                // pp ca i,j e coltul stanga-sus
                ii=i+m-1;
                jj=j+m-1;
                if (ii>n || jj>n || b[ii][jj]-b[i-1][jj]-b[ii][j-1]+b[i-1][j-1]!=f[k-'a'])
                    ok[i][j]=1;
            }
    }
    sol=0;
    for (i=1;i<=n;i++)
        for (j=1;j<=n;j++)
            sol=sol+1-ok[i][j];
    fprintf (fout,"%d",sol);
    return 0;
}