Cod sursa(job #498260)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 4 noiembrie 2010 18:51:59
Problema Matrix Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <cstdio>
#define nmax 1010

char s[nmax];
int n, m, a[nmax][nmax], b[30], d[30], sol, v[30];

int main()
{
	freopen("matrix.in","r",stdin);
	freopen("matrix.out","w",stdout);
	scanf("%d %d\n",&m,&n);
	int i, j, k, ok;
	for (i=1; i<=m; i++)
	{
		fgets(s, nmax, stdin);
		for (j=1; j<=m; j++) a[i][j]=s[j-1]-'a'+1;
	}
	for (i=0; i<n; i++) 
	{
		fgets(s, nmax, stdin);
		for (j=0; j<n; j++) v[s[j]-'a'+1]++;
	}
	for (i=1; i<n; i++)
		for (j=1; j<n; j++) 
			b[a[i][j]]++;
	for (i=n; i<=m; i++)
	{
		for (j=1; j<n; j++) 
		{
			b[a[i-n][j]]--;
			b[a[i][j]]++;
		}
		for (j=1; j<=26; j++) d[j]=b[j];
		for (j=n; j<=m; j++)
		{
			for (k=i; k>i-n; k--) 
			{
				d[a[k][j-n]]--;
				d[a[k][j]]++;
			}
			ok=1;
			for (k=1; k<=26; k++)
				if (d[k]!=v[k]) 
				{
					ok=0;
					break;
				}
			sol+=ok;
		}
	}
	printf("%d\n",sol);
}