Cod sursa(job #2013181)

Utilizator mihai.alphamihai craciun mihai.alpha Data 20 august 2017 18:26:59
Problema Matrix Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 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];
bool pot[MAX_N + 1][MAX_N + 1];
int current[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;
	for (int i = 1; i <= M; i++) {
		for (int j = 1; j <= M; j++) {
			c = fgetc(fin);
			ap[c - 'a']++;
		}
		fgetc(fin);
	}
	for (int lit = 0; lit < 1; lit++) {
		for (int i = 1; i <= N; i++)
			for (int j = 1; j <= N; j++) {
				int ok = 0;
				if (a[i][j] - 'a' == lit) {
					ok = 1;
				}
				current[i][j] = current[i - 1][j] + current[i][j - 1] - current[i - 1][j - 1] + ok;
			}
		for(int i = M;i <= N;i++)
			for (int j = M; j <= N; j++) {
				int sum = current[i][j] - current[i - M][j] - current[i][j - M] + current[i - M][j - M];
				if (sum != ap[lit]) {
					pot[i][j] = 1;
				}
			}
	}
	int ans = 0;
	for (int i = M; i <= N; i++)
		for (int j = M; j <= N; j++)
			ans += 1 - pot[i][j];
	fprintf(fout, "%d", ans);
	fclose(fin);
	fclose(fout);
	return 0;
}