Cod sursa(job #545087)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 2 martie 2011 18:06:46
Problema Castel Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <stdio.h>
#include <vector>

using namespace std;

vector <int> u[22500];
int x,y,v[22500],n,m,i,j,k,q[22501],c[22500],a,b;

void add()
{
    if (!v[y])
    {
        if (v[c[y]]==1)
        {
            ++q[0];
            q[q[0]]=y;
            v[y]=1;
        }
        else
        {
            u[c[y]].push_back(y);
            v[y]=2;
        }
    }
}

int main()
{
    freopen("castel.in","r",stdin);
    freopen("castel.out","w",stdout);
    scanf("%d%d%d",&n,&m,&k);--k;
    for (i=0;i<n;++i)
        for (j=0;j<m;++j)
        {
            scanf("%d",&c[i*m+j]);
            --c[i*m+j];
        }
    q[1]=k;q[0]=1;v[0]=1;
    for (i=1;(i<=q[0])&&(q[0]<=n*m);++i)
    {
        x=q[i];
        a=x/m;
        b=x%m;
        for (j=0;j<u[x].size();++j)
        {
            ++q[0];
            q[q[0]]=u[x][j];
            v[u[x][j]]=1;
        }
        if (a>0)
        {
            y=x-m;
            add();
        }
        if (a<n-1)
        {
            y=x+m;
            add();
        }
        if (b>0)
        {
            y=x-1;
            add();
        }
        if (b<m-1)
        {
            y=x+1;
            add();
        }
    }
    printf("%d",q[0]);
    return 0;
}