Pagini recente » Cod sursa (job #1604098) | Cod sursa (job #477314) | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #2013182)
#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;
}