Cod sursa(job #1268006)

Utilizator sddddgjdZloteanu Anastasia sddddgjd Data 20 noiembrie 2014 15:59:28
Problema Matrix Scor 80
Compilator c Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <stdio.h>
#define N 1000
int din[N][N],cate[N];
int can[N][N],sump[N][N];
int main()
{
    FILE *fin, *fout;
    fin=fopen("matrix.in", "r");
    fout=fopen("matrix.out", "w");
    int n,m;
    fscanf(fin, "%d%d ", &n, &m);
    int i;
    for(i=1; i<=n; i++)
    {
        int j;
        for(j=1; j<=n; j++)
        {
            int ch=fgetc(fin);
            din[i][j]=ch-'a';
        }
        fscanf(fin," ");
    }
    for(i=0; i<m; i++)
    {
        int j;
        for(j=0; j<m; j++)
        {
            int ch=fgetc(fin);
            cate[ch-'a']++;
        }
        fscanf(fin," ");
    }
    int alf;
    for(alf=0; alf<26; alf++)
    {
        int j;
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++)
            {
                sump[i][j]=sump[i][j-1]+sump[i-1][j]-sump[i-1][j-1];
                if(din[i][j]==alf)
                    sump[i][j]++;
                if(sump[i][j]==cate[alf]&&can[i][j]==alf)
                    can[i][j]=alf+1;
            }
        for(i=m; i<=n; i++)
            for(j=m; j<=n; j++)
                if(sump[i][j]-sump[i-m][j]-sump[i][j-m]+sump[i-m][j-m]==cate[alf]&&can[i][j]==alf)
                    can[i][j]=alf+1;
    }
    int sumpol=0;
    for(i=1; i<=n; i++)
    {
        int j;
        for(j=1; j<=n; j++)
            if(can[i][j]==26)
                sumpol++;
    }
    fprintf(fout, "%d\n", sumpol);
    return 0;
}