Cod sursa(job #363005)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 11 noiembrie 2009 15:18:25
Problema Matrix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<iostream>
#include<string>

using namespace std;

#define nm 1005
#define FOR(i,a,b)for(i=(a);i<=(b);++i)

char G[nm][nm],V[nm][nm],impos[nm][nm];

int cnt[26],T[nm][nm],N,M;

int main()
{
    int i,j,l,ans=0;
    
    freopen("matrix.in","r",stdin);
    freopen("matrix.out","w",stdout);
    
    scanf("%d %d\n",&N,&M);
    
    FOR(i,0,N-1)
      scanf("%s\n",&G[i]);
    
    FOR(i,0,M-1)
      scanf("%s\n",&V[i]);
      
    FOR(i,0,M-1)  
      FOR(j,0,M-1)
        ++cnt[V[i][j]-'a'];
    
    FOR(i,0,N-1)
      FOR(j,0,M-2)
        impos[i][j]=1;
        
    FOR(i,0,M-2)
      FOR(j,0,N-1)
        impos[i][j]=1;    
    
    FOR(l,0,25)    
    {
      char ch=l+'a';
      
      FOR(i,0,N-1)
        FOR(j,0,N-1)
        {
          T[i+1][j+1]=T[i+1][j]+T[i][j+1]-T[i][j];
          if(G[i][j]==ch) T[i+1][j+1]++;  
        }  
        
      FOR(i,M-1,N-1)
        FOR(j,M-1,N-1)
          if(!impos[i][j]) 
            if(cnt[l]!=(T[i+1][j+1]-T[i-M+1][j+1]-T[i+1][j-M+1]+T[i-M+1][j-M+1])) impos[i][j]=1;    
    }
    
     FOR(i,0,N-1)
        FOR(j,0,N-1)
          if(!impos[i][j]) ++ans;
          
     printf("%d",ans);     
    
    return 0;
}