Cod sursa(job #274114)

Utilizator f.v.antonFlavius Anton f.v.anton Data 9 martie 2009 14:12:45
Problema Matrix Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream.h>
#include <fstream.h>
#include <string.h>
char x[1002][1002],nr1[255],nr2[255],nrante[255];
int egal(char x[], char y[])
{
	for(int i=0;i<255;i++)
	 if(x[i]!=y[i])
	  return 0;
	return 1;
}
int main()
{
	char y[1002][1002],sir[1002];
	int n,m,i,j,l,c,count=0;
	fstream f("matrix.in",ios::in), g("matrix.out",ios::out);
	f>>m>>n;
	f.get();
	for(i=1;i<=m;i++)
	{  f.getline(sir,1000);
	  for(j=0;j<strlen(sir);j++)
	   x[i][j+1]=sir[j];
	}
	for(i=1;i<=n;i++)
       {  f.getline(sir,1000);
	  for(j=0;j<strlen(sir);j++)
	    y[i][j+1]=sir[j];
       }
       for(i=1;i<=n;i++)
	for(j=1;j<=n;j++)
	 nr2[y[i][j]]++;

	for(i=1;i<=n;i++)
	for(j=1;j<=n;j++)
	 nrante[x[i][j]]++;


       for(l=1;l<=m-n+1;l++)
       {
	 for(i=0;i<255;i++)
	    nr1[i]=nrante[i];
	 if(l>1)
	 {
	 for(i=1;i<=n;i++)
	  nr1[x[l-1][i]]--;
	 for(i=1;i<=n;i++)
	  nr1[x[l+n-1][i]]++;
	 }
	 if(egal(nr1,nr2))
	  count++;

	 for(c=2;c<=m-n+1;c++)
	 {
		for(i=l;i<=l+n-1;i++)
		 nr1[x[i][c-1]]--;
		for(i=l;i<=l+n-1;i++)
		 nr1[x[i][c+n-1]]++;
		if(egal(nr1,nr2))
		 count++;
	 }
	 for(i=0;i<255;i++)
	  nrante[i]=nr1[i];

	}
	g<<count;
	f.close();
	g.close();
	return 0;
}