Pagini recente » Cod sursa (job #1460544) | Cod sursa (job #2647232) | Cod sursa (job #502091) | Cod sursa (job #27117) | Cod sursa (job #380072)
Cod sursa(job #380072)
#include <stdio.h>
#define Mmax 1010
char A[Mmax][Mmax], OK[Mmax][Mmax], x;
int V[Mmax][Mmax], FR[150], M, N, i, j, L, sol;
int main() {
FILE *f = fopen("matrix.in", "r");
FILE *g = fopen("matrix.out", "w");
fscanf(f, "%d %d\n", &M, &N);
for (i = 1; i <= M; i++) {
for (j = 1; j <= M; j++) {
fscanf(f, "%c", &A[i][j]);
OK[i][j] = 1;
}
fscanf(f, "\n");
}
for (i = 1; i <= N; i++) {
for (j = 1; j <= N; j++) {
fscanf(f, "%c", &x);
FR[x]++;
}
fscanf(f, "\n");
}
//V[i][j] = de cate ori apare litera curenta in matricea [1][1] ... [i][j]
for (L = 'a'; L <= 'z'; L++)
for (i = 1; i <= M; i++)
for (j = 1; j <= M; j++) {
V[i][j] = V[i-1][j] + V[i][j-1] - V[i-1][j-1] + (L == A[i][j] ? 1 : 0);
if (i >= N && j >= N)
if (V[i][j] - V[i-N][j] - V[i][j-N] + V[i-N][j-N] != FR[L])
OK[i][j] = 0;
}
for (i = N; i <= M; i++)
for (j = N; j <= M; j++)
if (OK[i][j] == 1)
sol++;
fprintf(g, "%d", sol);
fclose(f); fclose(g);
return 0;
}