Cod sursa(job #2703309)

Utilizator stefanvoicaVoica Stefan stefanvoica Data 8 februarie 2021 09:29:47
Problema Castel Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <bits/stdc++.h>
#define dim 152
using namespace std;
ifstream fin ("castel.in");
ofstream fout("castel.out");
int n,m,necesar[dim][dim],coada[dim*dim][2],dx[]= {0,-1,0,1},dy[]= {-1,0,1,0}, viz[dim];
vector< pair<int,int> >v[dim*dim];


int floor (int a,int b)
{
    a=a+b-1;
    a/=b;
    return a;
}

void lee ()
{
    int p=1,u=1;
    while (p<=u)
    {
        int x=coada[p][0],y=coada[p][1];
        int i,nr=(x-1)*m+y;
        for (i=0; i<v[nr].size(); i++)
        if (viz[(v[nr][i].first-1)*m+v[nr][i].second]==0)
        {
            coada[++u][0]=v[nr][i].first;
            coada[u][1]=v[nr][i].second;
            viz[(v[nr][i].first-1)*m+v[nr][i].second]=1;
        }
        for (i=0; i<4; i++)
        {
            int xx=x+dx[i],yy=y+dy[i];
            if (xx>0 && xx<=n && yy>0 &&yy<=m&& viz[(xx-1)*m+yy]==0)
            {
                if (viz[necesar[xx][yy]])
                {
                    coada[++u][0]=xx;
                    coada[u][1]=yy;
                    viz[(xx-1)*m+yy]=1;
                }
                else v[necesar[xx][yy]].push_back(make_pair(xx,yy));
            }
        }
        ++p;
    }
    fout<<u<<'\n';
}

int32_t main()
{
    int i,j,k;
    fin>>n>>m>>k;
    coada[1][0]=floor(k,m);
    coada[1][1]=k-m*(coada[1][0]-1);
    viz[k]=1;
    for (i=1; i<=n; i++)
        for (j=1; j<=m; j++)
            fin>>necesar[i][j];
    lee();
    return 0;
}