Cod sursa(job #1105320)

Utilizator japjappedulapPotra Vlad japjappedulap Data 11 februarie 2014 18:31:46
Problema Castel Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <fstream>
#include <queue>
#include <vector>
#include <cstring>
using namespace std;

#define TX pair <int,int>
#define f first
#define s second

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

const int di[] = {-1, 0, 1, 0}, dj[] = {0, 1, 0, -1};

int n, m, p, M[155][155];
bool b[155][155];
bool key[50000];
TX F, o;

queue <TX> Q;
queue <int> Qs;
vector < vector<int> > v;
vector <int> vs;

void Read();
void Lee();
void Solve();
bool Ok(int i, int j);
TX Room(int x);

int main()
{
    Read();
    Solve();
    is.close();
    os.close();
    return 0;
}

void Solve()
{
    int x;
    Qs.push(p);
    while (!Qs.empty())
    {
        x = Qs.front(); Qs.pop();
        for (int i = 0; i < v[x].size(); ++i)
        {
            Qs.push(v[x][i]);
            if (key[v[x][i]] == 0) key[v[x][i]] = 1, vs.push_back(v[x][i]);
        }
        v[x].clear();
    }
    for (int i = 0; i < vs.size(); ++i)
    {
        F = Room(vs[i]);
        b[F.f][F.s] = 1;
    }
    os << vs.size() << '\n';
    /*for (int i = 0; i <= n+1; ++i)
    {
        for (int j = 0; j <= m+1; ++j)
            os << b[i][j] << ' ';
        os << '\n';
    }*/
};

void Read()
{
    is >> n >> m >> p;
    int x;
    v.resize(n*m+1);
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= m; ++j)
        {
            is >> M[i][j];
            v[M[i][j]].push_back((i-1)*m + j);
        }
};

bool Ok(int i, int j)
{
    if (i < 1 || i > n || j < 1 || j > m) return false;
    return true;
};

TX Room(int x)
{
    o.f = (x-1)/ m+1;
    o.s = (x-1)% m+1;
    return o;
};