Pagini recente » Cod sursa (job #2584203) | Cod sursa (job #2240806) | Cod sursa (job #3226511) | Cod sursa (job #808088) | Cod sursa (job #631420)
Cod sursa(job #631420)
#include <stdio.h>
#define NMAX 1024
char map[NMAX][NMAX], c;
int fw[NMAX][NMAX], bc[NMAX][NMAX], v[26];
int main()
{
freopen("matrix.in", "r", stdin);
freopen("matrix.out", "w", stdout);
int n, m, i, j, k;
char c;
scanf("%d %d", &n, &m);
for (i=1; i<=n; ++i) {
getc(stdin);
for (j=1; j<=n; ++j) {
scanf("%c", &map[i][j]);
map[i][j] -= 'a';
}
}
for (i=1; i<=m; ++i) {
for (j=1; j<=n; ++j) {
scanf("%c", &c);
++v[c-'a'];
}
}
for (k=0; k<26; ++k) {
for (i=1; i<=n; ++i)
for (j=1; j<=n; ++j)
fw[i][j] = fw[i-1][j] + fw[i][j-1] - fw[i-1][j-1] + (map[i][j] == k);
for (i=m; i<=n; ++i)
for (j=m; j<=n; ++j) {
int val = fw[i][j] - fw[i-m][j] - fw[i][j-m] + fw[i-m][j-m];
if (val != v[k])
bc[i][j] = 1;
}
}
int count=0;
for (i=m; i<=n; ++i)
for (j=m; j<=n; ++j)
count += (bc[i][j] == 1);
printf("%d\n", (n-m+1)*(n-m+1)-count);
return 0;
}