Cod sursa(job #496040)

Utilizator KoniacDocea Andrei Koniac Data 27 octombrie 2010 17:09:19
Problema Matrix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<stdio.h>
#include<string.h>
#define ct 1001
FILE*f=fopen("matrix.in","r");
FILE*g=fopen("matrix.out","w");
int v[150],i,j,n,m,d,c[ct][ct],nr;
char a[ct][ct],x,ok[ct][ct];
int main () {
	fscanf(f,"%d %d\n",&m,&n);
	for(i=1;i<=m;i++){
		for(j=1;j<=m;j++)
			fscanf(f,"%c",&a[i][j]);
		fscanf(f,"\n");
	}
	fscanf(f,"\n");
	for(i=1;i<=n;i++){
		for(j=1;j<=n;j++){
			fscanf(f,"%c",&x);
			v[x]++;
		}
		fscanf(f,"\n");
	}
	for(d='a';d<='z';d++){
		memset(c,0,sizeof(c));
		for(i=1;i<=m;i++){
			for(j=1;j<=m;j++){
				c[i][j]=c[i-1][j]+c[i][j-1]-c[i-1][j-1];
				if(a[i][j]==d)
					c[i][j]++;
			}
		}
		
		for(i=n;i<=m;i++){
			for(j=n;j<=m;j++){
				if((c[i][j]-c[i-n][j]-c[i][j-n]+c[i-n][j-n]!=v[d]))
					ok[i][j]=1;
			}
		}
	}
	for(i=n;i<=m;i++)
		for(j=n;j<=m;j++)
			if(ok[i][j]==0)
				nr++;
	fprintf(g,"%d",nr);
	fclose(f);
	fclose(g);
	return 0;
}