Cod sursa(job #2208960)

Utilizator AlexPop28Pop Alex-Nicolae AlexPop28 Data 1 iunie 2018 13:23:50
Problema Castel Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>
#define all(cont) cont.begin(), cont.end()
#define pb push_back

using namespace std;

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

const int NMAX = 151;
int v[NMAX * NMAX];
bool vis[NMAX * NMAX];
bool key[NMAX * NMAX];
vector <int> q;

int main() {
    int n, m, k;
    f >> n >> m >> k;
    int p = 0;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            f >> v[++p];
        }
    }
    int dir[] = {-1, 1, -m, m};
    key[v[k]] = true;
    vis[k] = true;
    q.pb(k);
    bool finished = false;
    int ans = 1;
    while (!finished) {
        finished = true;
        for (int pos : q) {
            for (int d = 0;d < 4; ++d) {
                int newPos = pos + dir[d];
                if ((d == 0 && newPos % m == 0) ||
                    (d == 1 && newPos % m == 1) ||
                    newPos < 1 ||
                    newPos > n * m || vis[newPos]) {
                        continue;
                }

                if (key[v[newPos]]) {
                    key[newPos] = true;
                    vis[newPos] = true;
                    q.pb(newPos);
                    finished = false;
                    ++ans;
                }
            }
        }
    }

    g << ans << '\n';

    f.close();
    g.close();
    return 0;
}