Cod sursa(job #2780619)

Utilizator puica2018Puica Andrei puica2018 Data 7 octombrie 2021 13:28:28
Problema Castel Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <bits/stdc++.h>

using namespace std;

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

int m,n,k;
int a[155][155],vis[155*155],inSet[155*155];
pair <int,int> pos[155*155];
vector <int> h[155*155];

set <int> st;

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

void del(set <int> :: iterator it)
{
    set <int> :: iterator it1=it;
    it1++;
    st.erase(it,it1);
}

void update(int v)
{
    del(st.find(v));
    inSet[v]=0;
    for(auto x:h[v])
    {
        if(!inSet[x] && ok(x))
        {
            inSet[x]=1;
            st.insert(x);
        }
    }
}

int main()
{
    fin>>n>>m>>k;
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            fin>>a[i][j];
            h[a[i][j]].push_back((i-1)*m+j);
        }
    }
    int cnt=0;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            pos[++cnt]=make_pair(i,j);
    vis[k]=1;
    update(k);
    bool can=1;
    while(can)
    {
        can=0;
        set <int> :: iterator it=st.begin();
        for(; it!=st.end(); it++)
        {
            int v=*it,i=pos[v].first,j=pos[v].second;
            vis[v]=1;
            update(v);
            can=1;
        }
    }
    int ans=0;
    for(int i=1; i<=n*m; i++)
        ans+=vis[i];
    fout<<ans<<"\n";
    return 0;
}