Cod sursa(job #271933)

Utilizator katakunaCazacu Alexandru katakuna Data 6 martie 2009 09:04:26
Problema Matrix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>


int A,B,i,j,l,viz[64],rez,nr[1011][1011],k;
char r[1011][1011],a[1011][1011],b[1011][1011];

int main(){


	FILE *f = fopen("matrix.in","r");
	FILE *g = fopen("matrix.out","w");
	
	fscanf(f,"%d %d\n",&A,&B);

	for(i=1; i<=A; i++){
		for(j=1; j<=A; j++){
			fscanf(f,"%c",&a[i][j]);
			r[i][j] = 1;
		}
		fscanf(f,"\n");
	}		
	
	for(i=1; i <= B; i++){
		for(j=1; j <= B; j++){
			fscanf(f,"%c",&b[i][j]);
			viz[ b[i][j] - 'a' ]++;
		}
		fscanf(f,"\n");
	}
	
	
	for(l=0; l <= ('z' - 'a'); l++){
		
		for(i=1; i <=A ; i++)
			for(j=1 ; j <= A; j++){
				nr[i][j] = nr[i-1][j] + nr[i][j-1] - nr[i-1][j-1];
				if( a[i][j] == l + 'a' )
					nr[i][j]++;
				
				if( i >= B && j>= B ){
					if( r[i][j] &&  nr[i][j] - nr[ i-B ][j] - nr[i][ j-B ] + nr[i-B][j-B] != viz[ l ] ){
						r[i][j] = 0;
					}
				}
			}
		
	}
	
	for(i=B; i<=A; i++)
		for(j=B; j<=A; j++)
			if( r[i][j] )
				rez++;
	
	
	fprintf(g,"%d",rez);
	
	fclose(f);
	fclose(g);

	return 0;
	
}