Cod sursă (job #309952)

Utilizator avatar calingeorgescu Calin Stefan Georgescu calingeorgescu IP ascuns
Problemă Pointeri Compilator c | 1,00 kb
Rundă Arhiva de probleme Status evaluat
Dată 6 aug. 2017 15:53:39 Scor 0
#include <stdio.h>
#include <stdlib.h>
#define NIL -1
#define NMAX 200000

int st[NMAX], dr[NMAX];

void transform (int pos, int *first, int *last) {
    if (st[pos] != NIL)
        transform(st[pos],first,last);
    if (first == NIL)
        *first = *last = pos;
    else {
        st[pos] = *last;
        dr[*last] = pos;
        *last = pos;
    }
    if (dr[pos] != NIL)
        transform(dr[pos],first,last);
}

int main() {
    FILE *fin, *fout;
    int N, i, rad;
    fin = fopen("pointeri.in","r");
    fscanf(fin, "%d%d", &N, &rad);
    for (i=0; i<N; ++i)
        fscanf(fin, "%d", &st[i]);
    for (i=0; i<N; ++i)
        fscanf(fin, "%d", &dr[i]);
    fclose(fin);
    int first = -1, last = -1;
    transform(rad, &first, &last);
    fout = fopen("pointeri.out","w");
    fprintf(fout, "%d\n", first);
    for (i=0; i<N; ++i)
        fprintf(fout, "%d ", st[i]);
    fprintf(fout, "\n");
    for (i=0; i<N; ++i)
        fprintf(fout, "%d ", dr[i]);
    return 0;
}