Cod sursa(job #3238749)

Utilizator PitigoiOlteanEmanuelPitigoi Oltean Emanuel PitigoiOlteanEmanuel Data 30 iulie 2024 12:09:07
Problema Castel Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <fstream>
#include <queue>
#include <set>
#include <unordered_map>
using namespace std;
ifstream cin("castel.in");
ofstream cout("castel.out");
int cnt=0,n,m1;
int v[160][160],cheie[160][160];
int poz,px,py;
int cnt1=0;
int d1[]={0,0,-1,1};
int d2[]={1,-1,0,0};


    unordered_map <int,int> m;
void lee()
{

    queue <pair<int,int>> q;
    q.push({px,py});
 int viz[160][160]={0};
    m[cheie[px][py]]=1;
    viz[px][py]=1;
    cnt1++;
    while(!q.empty())
    {
        int a=q.front().first,b=q.front().second;
        q.pop();
        cnt1++;

        for(int i=0;i<=3;i++)
        {
            if( viz[a+d1[i]][b+d2[i]]==0 && v[a+d1[i]][b+d2[i]]!=-1 && m[v[a+d1[i]][b+d2[i]]]==1)
            {

                m[cheie[a+d1[i]][b+d2[i]]]=1;
                q.push({a+d1[i],b+d2[i]});
                viz[a+d1[i]][b+d2[i]]=1;
            }
        }

    }




}


int main()
{
    cin>>n>>m1>>poz;
    int a=poz/m1;
    poz-=a*m1;
    py=poz;
    px=a;
    if(py==0)
    {
        py=m1;
    }
    if(px==0)
    {
        px=1;
    }

    int cnt=0;
    for(int i=1;i<=n;i++)
    {
        for(int k=1;k<=m1;k++)
        {
            cin>>v[i][k];
        }
    }
    for(int i=0;i<=n+1;i++)
    {
        v[i][0]=-1;
        v[i][m1+1]=-1;
    }
    for(int i=0;i<=m1+1;i++)
    {
        v[0][i]=-1;
        v[n+1][i]=-1;
    }
    for(int i=1;i<=n;i++)
    {
        for(int k=1;k<=m1;k++)
        {
            cnt++;
            cheie[i][k]=cnt;

        }
    }

    lee();
    lee();
    cnt1=0;
    lee();
    cout<<cnt1-1<<'\n';




    return 0;
}