Cod sursa(job #2698812)

Utilizator ElektrykT E S L A P E F E L I E Elektryk Data 23 ianuarie 2021 09:47:49
Problema Castel Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 157;

void pheel ( int x, int y );

void resetAll ();

int n, m, k;

int v[NMAX][NMAX];

int L, C;

int sorin;

bool chei[NMAX * NMAX];

bool open[NMAX][NMAX];

bool viz[NMAX][NMAX];

int dx[] = { 0, 1, 0, -1, 0 };
int dy[] = { 0, 0, 1, 0, -1 };

int main()
{
    in >> n >> m >> k;
    for ( int i = 1 ; i <= n ; ++i )
        for ( int j = 1 ; j <= m ; ++j )
            in >> v[i][j];
    L = k / m + 1;
    C = k % m;
    if ( C == 0 )
        C = m;
    open[L][C] = true;
    for ( int q = 1 ; q <= 200 ; ++q )
    {
        resetAll();
        pheel ( L, C );
    }
    for ( int i = 1 ; i <= n ; ++i )
        for ( int j = 1 ; j <= m ; ++j )
            if ( open[i][j] )
                ++sorin;
    out << sorin;
    return 0;
}

void pheel ( int x, int y )
{
    chei[m * ( x - 1 ) + y] = true;
    viz[x][y] = true;
    for ( int d = 1 ; d <= 4 ; ++d )
        if ( !viz[x + dx[d]][y + dy[d]]  &&  chei[v[x + dx[d]][y + dy[d]]] )
        {
            open[x + dx[d]][y + dy[d]] = true;
            pheel ( x + dx[d], y + dy[d] );
        }
}

void resetAll ()
{
    for ( int i = 1 ; i <= n ; ++i )
        for ( int j = 1 ; j <= m ; ++j )
            viz[i][j] = 0;
}