Cod sursa(job #844759)

Utilizator mirceadinoMircea Popoveniuc mirceadino Data 29 decembrie 2012 19:40:58
Problema Matrix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<cstdio>
#define NMAX 1000+10
#define MMAX 1000+10
#define SMAX 26+3
using namespace std;
char om[MMAX][MMAX],vr[NMAX][NMAX],*p;
int m,n,i,j,virus[SMAX],letter,T[MMAX][MMAX],sol;
bool check[MMAX][MMAX];
int main()
{
    freopen("matrix.in","r",stdin);
    freopen("matrix.out","w",stdout);
    scanf("%d%d",&m,&n);
    for(i=1;i<=m;i++)
    {
        scanf("%s",om[i]+1);
        for(j=1;j<=m;j++) check[i][j]=1;
    }
    for(i=1;i<=n;i++)
    {
        scanf("%s",vr[i]+1);
        for(p=vr[i]+1;*p;p++)
            virus[*p-'a'+1]++;
    }
    for(letter=1;letter<=26;letter++)
    {
        for(i=1;i<=m;i++)
        {
            for(p=om[i]+1,j=1;*p;p++,j++)
            {
                T[i][j]=T[i-1][j]-T[i-1][j-1]+T[i][j-1]+(*p-'a'+1==letter);
                if(i>=n&&j>=n)
                {
                    if(T[i][j]-T[i-n][j]-T[i][j-n]+T[i-n][j-n]!=virus[letter]) check[i][j]=0;
                    if(letter==26 && check[i][j]==1) sol++;
                }
            }
        }
    }
    printf("%d\n",sol);
    return 0;
}