Pagini recente » Cod sursa (job #1479789) | Cod sursa (job #1908312) | Cod sursa (job #2801610) | Cod sursa (job #417507) | Cod sursa (job #832657)
Cod sursa(job #832657)
#include <stdio.h>
char x[1024][1024], frequence[30];
int dp[1024][1024];
bool good[1024][1024];
int main()
{
int i, j, letter, N, M;
char ch;
freopen("matrix.in", "r", stdin);
freopen("matrix.out", "w", stdout);
scanf("%d%d", &N, &M);
for (i = 1; i <= N; i ++)
for (j = 1; j <= N; j ++)
scanf(" %c ", &x[i][j]);
for (i = 1; i <= M; i ++)
for (j = 1; j <= M; j ++)
{
scanf(" %c ", &ch);
frequence[ch - 'a'] ++;
}
for (i = M; i <= N; i ++)
for (j = M; j <= N; j ++)
good[i][j] = true;
for (letter = 0; letter <= 25; letter ++)
for (i = 1; i <= N; i ++)
for (j = 1; j <= N; j ++)
{
dp[i][j] = dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1];
if (x[i][j] == ((char)letter + 'a'))
dp[i][j] ++;
if (good[i][j])
{
int now = dp[i][j] - dp[i - M][j] - dp[i][j - M] + dp[i - M][j - M];
if (now != frequence[letter])
good[i][j] = false;
}
}
int sol = 0;
for (i = M; i <= N; i ++)
for (j = M; j <= N; j ++)
if (good[i][j])
sol ++;
printf("%d", sol);
return 0;
}