Cod sursa(job #425799)

Utilizator AndreiRSStatescu Andrei Rares AndreiRS Data 26 martie 2010 09:30:46
Problema Matrix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
#define DIM 1001

FILE *f1 = fopen("matrix.in","r");
FILE *f2 = fopen("matrix.out","w");

int a[DIM][DIM];
int prp[DIM][DIM];
int v[DIM][DIM];
int fr[255];

int m,n; 
int i,j;
int c,out;

int main(){
	
	fscanf(f1,"%d %d\n",&n,&m);
	for(i=1; i<=n; i++){
		for(j=1; j<=n; j++)
			fscanf(f1,"%c",&a[i][j]);
		fscanf(f1,"\n");
	}
	
	for(i=1; i<=m; i++){
		for(j=1; j<=m; j++){
			fscanf(f1,"%c",&c);
			fr[c]++;
		}
		fscanf(f1,"\n");
	}
	
	for(c='a'; c<='z'; c++)
		for(i=1; i<=n; i++)
			for(j=1; j<=n; j++){
				prp[i][j] = prp[i-1][j] + prp[i][j-1] - prp[i-1][j-1];
				if(a[i][j] == c)
					prp[i][j]++;
				
				if(i>=m && j>=m && v[i][j] == 0)
					if(!(fr[c] == prp[i][j] - prp[i-m][j] - prp[i][j-m] + prp[i-m][j-m]))
						v[i][j] = 1;
			}
	
	for(i=m; i<=n; i++)
		for(j=m; j<=n; j++)
			out += !v[i][j];

	fprintf(f2,"%d",out);
	
	fclose(f1);
	fclose(f2);
	
	return 0;
}