Cod sursa(job #3620)

Utilizator Binary_FireFlorin Pogocsan Binary_Fire Data 27 decembrie 2006 11:11:37
Problema Matrix Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<stdio.h>
#define fin "matrix.in"
#define fout "matrix.out"
#define NMAX 1001
char map[NMAX][NMAX],vir[NMAX][NMAX];
int sol,n,m,v[NMAX][NMAX][27],v2[27];
FILE *in,*out;

int main() {
int i,j,k,tmp[27];
	in=fopen(fin,"r"); out=fopen(fout,"w");
	fscanf(in,"%i%i",&n,&m);
	for (i=1;i<=n;++i) {
		fgetc(in);
		for (j=1;j<=n;++j) { 
			map[i][j]=fgetc(in);
			map[i][j]-='a';
		}
	}
	for (i=1;i<=m;++i) {
		fgetc(in);
		for (j=1;j<=m;++j) { 
			vir[i][j]=fgetc(in);
			vir[i][j]-='a';
			v2[vir[i][j]]++;
		}
	}
	for (i=1;i<=n;++i) 
	for (j=1;j<=n;++j) {
		
		for (k=0;k<=26;++k) v[i][j][k]=v[i][j][k]+v[i-1][j][k]+v[i][j-1][k];
		for (k=0;k<=26;++k) { 
			
			v[i][j][k]=v[i][j][k]-v[i-1][j-1][k];
			tmp[k]=0;
		}

		v[i][j][map[i][j]]++;

		if (i>=m && j>=m) { 
			
			for (k=0;k<=26;++k) 
			tmp[k]=v[i][j][k]-v[i-m][j][k]-v[i][j-m][k]+v[i-m][j-m][k];
			
			for (k=0;k<=26 && tmp[k]==v2[k];++k);
		       	if (k>26) sol++;	
		}
	}
	
	/*for (i=1;i<=n;++i)
	for (j=1;j<=n;++j) {
		for (k=0;k<=4;++k) fprintf(out,"%i ",v[i][j][k]);
		fprintf(out,"\n");
	}*/
	fprintf(out,"%i\n",sol);

	fclose(in); fclose(out);
	
	return 0;
	
	
}