Cod sursa(job #425801)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 26 martie 2010 09:35:49
Problema Matrix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<stdio.h>
#include<string.h>
FILE*f=fopen("matrix.in","r");
FILE*g=fopen("matrix.out","w");
int fr[150],i,j,n,m,d,c[1001][1001],nr;
char a[1001][1001],x,ok[1001][1001];
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);
			fr[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]==fr[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;
}