Cod sursa(job #1343303)

Utilizator zombacDica Razvan zombac Data 15 februarie 2015 11:14:46
Problema Matrix Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#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(c);
            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;
}