Cod sursa(job #1730757)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 17 iulie 2016 16:20:03
Problema Matrix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<cstdio>
#define MAXN 1010
#define SIGMA 30
using namespace std;
char a[MAXN][MAXN];
int vc[SIGMA];
int ok[MAXN][MAXN],sum[MAXN][MAXN];
int main(){
    freopen("matrix.in","r",stdin);
    freopen("matrix.out","w",stdout);
    int n,m,i,j,k,answer=0;
    char ch;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
        scanf("%s",a[i]+1);
    scanf("%c",&ch);
    for(i=1;i<=m;i++){
        for(j=1;j<=m;j++){
            scanf("%c",&ch);
            vc[ch-'a'+1]++;
        }
        scanf("%c",&ch);
    }
    for(i=m;i<=n;i++)
        for(j=m;j<=n;j++)
            ok[i][j]=1;
    for(k=1;k<=26;k++){
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++){
                sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
                if(a[i][j]-'a'+1==k)
                    sum[i][j]++;
            }
        for(i=m;i<=n;i++)
            for(j=m;j<=n;j++)
                if(sum[i][j]-sum[i-m][j]-sum[i][j-m]+sum[i-m][j-m]!=vc[k])
                    ok[i][j]=0;
    }
    for(i=m;i<=n;i++)
        for(j=m;j<=n;j++)
            answer+=ok[i][j];
    printf("%d",answer);
    return 0;
}