Cod sursă (job #146148)

Utilizator avatar edim98 Soyey Angura edim98 IP ascuns
Problemă Pointeri Compilator cpp | 0,98 kb
Rundă Arhiva de probleme Status evaluat
Dată 14 mai 2015 20:20:51 Scor 100
#include <cstdio>

using namespace std;

FILE *fin = fopen("pointeri.in", "r");
FILE *fout = fopen("pointeri.out", "w");

int N, rad, st[200001], dr[200001];
int prim = -1, ultim = -1;
void parcurgere(int x)
{
    int aux;
    if(st[x] != -1)
        parcurgere(st[x]);
    aux = dr[x];
    if(prim == -1)
        prim = x;
    else
    {
        st[x] = ultim;
        dr[ultim] = x;
    }
    dr[x] = -1;
    ultim = x;
    if(aux != -1)
        parcurgere(aux);
}

void citire()
{
    fscanf(fin, "%d%d", &N, &rad);
    for(int i = 0; i < N; i++)
        fscanf(fin, "%d", &st[i]);
    for(int i = 0; i < N; i++)
        fscanf(fin, "%d", &dr[i]);
}

void afisare()
{
    fprintf(fout, "%d\n", prim);
    for(int i = 0; i < N; i++)
        fprintf(fout, "%d ", st[i]);
    fprintf(fout, "\n");
    for(int i = 0; i < N; i++)
        fprintf(fout, "%d ", dr[i]);
}

int main()
{
    citire();
    parcurgere(rad);
    afisare();
    return 0;
}