Cod sursa(job #2812582)

Utilizator MariusDinsorea32DinsoreanMarius MariusDinsorea32 Data 4 decembrie 2021 19:18:02
Problema Castel Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <fstream>
#include <queue>

using namespace std;

ifstream fin("castel.in");
ofstream fout("castel.out");

const int N = 156;
const int ox[] = {0, 1, 0, -1};
const int oy[] = {1, 0, -1, 0};

queue <pair<int, int>> q;

int n, m, k, i, j, z, coord, l, c, ln, cn, rez;

bool used[N][N];

int a[N][N], b[N][N], frecv[N * N], fr[N * N];

bool inside(int a, int b)
{
    if(a <= n && a >= 1 && b <= m && b >= 1) return true;
    return false;
}

int main()
{
    fin >> n >> m >> k;
    frecv[k]++;
    for(i = 1; i <= n; i++)
        for(j = 1; j <= m; j++)
        {
            fin >> a[i][j];
            z++;
            b[i][j] = z;
            if(z == k) used[i][j] = true, fr[z]++, frecv[z]++, q.push(make_pair(i, j));
        }
    while(q.empty() == 0)
    {
        pair<int, int> coord = q.front();
        l = coord.first;
        c = coord.second;
        for(i = 0; i < 4; i++)
        {
            ln = l + ox[i];
            cn = c + oy[i];
            if(frecv[a[ln][cn]]) frecv[b[ln][cn]]++;
            if(inside(ln, cn) && frecv[a[ln][cn]] && fr[b[ln][cn]] <= 2)
            {
                fr[b[ln][cn]]++;
                q.push(make_pair(ln, cn));
                used[ln][cn] = true;
            }
        }
        q.pop();
    }
    for(i = 1; i <= n; i++)
        for(j = 1; j <= m; j++) rez += used[i][j];
    fout << rez;
    return 0;
}