Cod sursa(job #249279)

Utilizator ProtomanAndrei Purice Protoman Data 27 ianuarie 2009 22:53:07
Problema Matrix Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
#include <algorithm>
#define MAX 1024
using namespace std;

int n, m, rez;
int matMat[MAX][MAX][26], matLin[MAX][MAX][26];
int fMatrix[26];
char matInit[MAX][MAX];

int main()
{
	freopen("matrix.in","r",stdin);
	freopen("matrix.out","w",stdout);
	
	scanf("%d %d\n", &m, &n);

	for (int i = 1; i <= m; i++)
	{
		int vctLin[26];
		memset(vctLin, 0, sizeof(vctLin));

		for (int j = 1; j <= m; j++)
		{
			scanf("%c", &matInit[i][j]);

			vctLin[matInit[i][j] - 'a']++;
			if (j > n)
				vctLin[matInit[i][j - n] - 'a']--;

			memcpy(matMat[i][j], matMat[i - 1][j], sizeof(matMat[i][j]));
			for (int cf = 0; cf < 26; cf++)
			{
				matMat[i][j][cf] += vctLin[cf];
				if (i > n)
					matMat[i][j][cf] -= matMat[i - n][j][cf];
			}
		}

		scanf("\n");
	}
	
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)
		{
			char elMatrix;
			scanf("%c", &elMatrix);

			fMatrix[elMatrix - 'a']++;
		}

		scanf("\n");
	}

	for (int i = 1; i <= m; i++)
		for (int j = 1; j <= m; j++)
			if (!memcmp(fMatrix, matMat[i][j], sizeof(fMatrix)))
				rez++;

	printf("%d\n", rez);

	fclose(stdin);
	fclose(stdout);
	return 0;
}