Cod sursă (job #77200)

Utilizator avatar AlexNiculae Niculae Alexandru-Vlad AlexNiculae IP ascuns
Problemă Pointeri Compilator cpp | 1,11 kb
Rundă Tema 2 clasele 9-10 2014/15 Status evaluat
Dată 5 oct. 2014 18:35:37 Scor 40
#include <cstdio>
#include <algorithm>
#define Nmax 200000+10
#define st first
#define dr second

using namespace std;

pair <int,int> sol[Nmax];
int fiu[Nmax][3];
int tata[Nmax],a[Nmax];
int i,n,nr,x,rad,t;
bool sel[Nmax];


int main()
{
    freopen("pointeri.in","r",stdin);
    freopen("pointeri.out","w",stdout);

    scanf("%d %d", &n, &rad);
    for (i=0; i<n; ++i)
    {
        scanf("%d", &fiu[i][1]);
        tata[fiu[i][1]]=i;
    }
    for (i=0; i<n; ++i)
    {
        scanf("%d", &fiu[i][2]);
        tata[fiu[i][2]]=i;
    }

    nr=0; x=rad;
    while (t<n)
    {
        if (fiu[x][1]==-1 || sel[fiu[x][1]]) {if (!sel[x]) a[++t]=x, sel[x]=true;}
        else {x=fiu[x][1]; continue;}

        if (fiu[x][2]==-1 || sel[fiu[x][2]]) x=tata[x];
        else x=fiu[x][2];

    }

    a[0]=a[n+1]=-1;
    for (i=1;i<=n;++i)
    {
        sol[a[i]].st=a[i-1];
        sol[a[i]].dr=a[i+1];
    }

    printf("%d\n", a[1]);
    for (i=0;i<n;++i) printf("%d ", sol[i].st);
    printf("\n");
    for (i=0;i<n;++i) printf("%d ", sol[i].dr);







    return 0;
}