Cod sursa(job #2205385)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 18 mai 2018 22:48:22
Problema Matrix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cstdio>

using namespace std;
char a[1002][1002];
int f[26];
int d[1002][1002],lit[1002][1002];
int main()
{
    int n,m,i,j,k,nr,aux;
    freopen("matrix.in","r",stdin);
    freopen("matrix.out","w",stdout);
    scanf("%d%d",&n,&m);
    getchar();
    for(i=1; i<=n; i++)
        for(j=1; j<=n+1; j++)
            a[i][j]=getchar();
    for(i=1; i<=m; i++)
        for(j=1; j<=m+1; j++)
        {
            int c=getchar();
            if(j<m+1)
                f[c-'a']++;
        }
    for(k=0; k<26; k++)
    {
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++)
            {
                d[i][j]=d[i][j-1];
                if(a[i][j]-'a'==k)
                    d[i][j]++;
            }
        for(j=1; j<=n; j++)
            for(i=1; i<=n; i++)
                d[i][j]+=d[i-1][j];
        for(i=m; i<=n; i++)
            for(j=m; j<=n; j++)
            {
                aux=d[i][j]+d[i-m][j-m]-d[i-m][j]-d[i][j-m];
                if(aux==f[k])
                    lit[i][j]++;
            }
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++)
                d[i][j]=0;
    }
    nr=0;
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            if(lit[i][j]==26)
                nr++;
    printf("%d",nr);

    return 0;
}