Cod sursa(job #2013182)

Utilizator mihai.alphamihai craciun mihai.alpha Data 20 august 2017 18:36:36
Problema Matrix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <stdio.h>

#define MAX_N 1000
#define MAX_M 1000
#define alfa 1000

int N, M;
FILE *fin, *fout;

int ap[alfa + 1];
char a[MAX_N + 1][MAX_N + 1];
int current[MAX_N + 1][MAX_N + 1], currentp[MAX_N + 1][MAX_N + 1];

int main() {
	fin = fopen("matrix.in", "r");
	fout = fopen("matrix.out", "w");
	fscanf(fin, "%d%d", &N, &M);
	fgetc(fin);
	char c;
	for (int i = 1; i <= N; i++) {
		fgets(a[i] + 1, N + 3, fin);
	}
	int sum = 0, sump = 0;
	for (int i = 1; i <= M; i++) {
		for (int j = 1; j <= M; j++) {
			c = fgetc(fin);
			sum += c - 'a' + 1;
			sump += (c - 'a' + 1) * (c - 'a' + 1);
		}
		fgetc(fin);
	}
	int ans = 0;
	for(int i = 1;i <= N;i++)
		for (int j = 1; j <= N; j++) {
			current[i][j] = current[i - 1][j] + current[i][j - 1] - current[i - 1][j - 1] + a[i][j] - 'a' + 1;
			currentp[i][j] = currentp[i - 1][j] + currentp[i][j - 1] - currentp[i - 1][j - 1] + (a[i][j] - 'a' + 1) * (a[i][j] - 'a' + 1);
		}
	for(int i = M;i <= N;i++)
		for (int j = M; j <= N; j++) {
			int a, ap;
			a = current[i][j] - current[i - M][j] - current[i][j - M] + current[i - M][j - M];
			ap = currentp[i][j] - currentp[i - M][j] - currentp[i][j - M] + currentp[i - M][j - M];
			if (a == sum && ap == sump)
				ans++;
		}
	fprintf(fout, "%d", ans);
	fclose(fin);
	fclose(fout);
	return 0;
}