Pagini recente » Cod sursa (job #2079369) | Cod sursa (job #1967745) | Cod sursa (job #2334397) | Cod sursa (job #1516232) | Cod sursa (job #1343302)
#include <fstream>
using namespace std;
ifstream fin ("matrix.in");
ofstream fout ("matrix.out");
int N, M, F[30], V[1010][1010];
short A[1010][1010];
char c;
bool S[1010][1010];
void Read_Data()
{
fin >> M >> N;
for (int i = 1; i <= M; i++)
{
fin.get();
for (int j = 1; j <= M; j++)
{
fin.get();
A[i][j] = c - '0';
}
}
for (int i = 1; i <= N; i++)
{
fin.get();
for (int j = 1; j <= N; j++)
{
fin.get(c);
F[c - '0'] += 1;
}
}
}
void Solve()
{
for (int k = 0; k <= 26; k++)
{
for (int i = 1; i <= M; i++)
{
for (int j = 1; j <= M; j++)
{
V[i][j] = V[i-1][j] + V[i][j-1] - V[i-1][j-1];
if (A[i][j] == k) V[i][j] += 1;
if (i >= N && j >= N)
{
if (V[i][j] - V[i-N][j] - V[i][j-N] + V[i-N][j-N] != F[k]) S[i][j] = 1;
}
}
}
}
}
void Get_Sol()
{
int sol = 0;
for (int i = N; i <= M; i++)
{
for (int j = N; j <= M; j++)
{
if (!S[i][j]) sol++;
}
}
fout << sol << '\n';
fout.close();
}
int main()
{
Read_Data();
Solve();
Get_Sol();
return 0;
}