Cod sursă (job #238737)

Utilizator avatar heyanca Anca Badiu heyanca IP ascuns
Problemă Pointeri Compilator cpp | 2,50 kb
Rundă Arhiva de probleme Status evaluat
Dată 30 apr. 2016 16:41:02 Scor 100
#include <fstream>

using namespace std;

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

#define MAX 200001

struct pointer
{
    int st, dr;
}a[MAX];

int n, rad, i, prim, bef1, bef2;

void rez(int ind)
{
    if (a[ind].st == -1 && a[ind].dr == -1)
    {
        i++;
        if (i == 1)
        {
            prim = ind;
            bef1=ind;
            a[ind].st=-1;
        }
        else if (i == 2)
        {
            bef2=ind;
            a[bef1].dr = ind;
            a[bef2].st = bef1;
        }
        else
        {
            a[bef2].dr = ind;
            a[ind].st = bef2;
            bef1 = bef2;
            bef2 = ind;
        }

        return;
    }
    else if (a[ind].st == -1)
    {
        i++;
        if (i == 1)
        {
            prim = ind;
            bef1=ind;
            a[ind].st=-1;
        }
        else if (i == 2)
        {
            bef2=ind;
            a[bef1].dr = ind;
            a[bef2].st = bef1;
        }
        else
        {
            a[bef2].dr = ind;
            a[ind].st = bef2;
            bef1 = bef2;
            bef2 = ind;
        }

        rez(a[ind].dr);
    }
    else if (a[ind].dr == -1)
    {
        rez(a[ind].st);

        i++;
        if (i == 1)
        {
            prim = ind;
            bef1=ind;
            a[ind].st=-1;
        }
        else if (i == 2)
        {
            bef2=ind;
            a[bef1].dr = ind;
            a[bef2].st = bef1;
        }
        else
        {
            a[bef2].dr = ind;
            a[ind].st = bef2;
            bef1 = bef2;
            bef2 = ind;
        }
    }
    else
    {
        rez(a[ind].st);

        i++;
        if (i == 1)
        {
            prim = ind;
            bef1=ind;
            a[ind].st=-1;
        }
        else if (i == 2)
        {
            bef2=ind;
            a[bef1].dr = ind;
            a[bef2].st = bef1;
        }
        else
        {
            a[bef2].dr = ind;
            a[ind].st = bef2;
            bef1 = bef2;
            bef2 = ind;
        }

        rez(a[ind].dr);
    }
}
int main()
{
    //citire
    fin >> n >> rad;
    for (int j = 0; j<n; j++) fin >> a[j].st;
    for (int j = 0; j<n; j++) fin >> a[j].dr;

    rez(rad);

    fout << prim << '\n';

    for (int j = 0; j<n ; j++) fout << a[j].st << ' ';
    fout << '\n';

    for (int j = 0; j<n; j++) fout << a[j].dr << ' ';
    fout << '\n';
    return 0;
}