Cod sursa(job #1586283)

Utilizator DevilOnFieldTudor Horia Niculescu DevilOnField Data 31 ianuarie 2016 23:00:59
Problema Stramosi Scor 80
Compilator c Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<stdio.h>
#define NRMOSI 18
#define NMAX 250000

FILE *in, *out;

int tati[NMAX][NRMOSI + 1], i, j, q, n, nr, pers;

int main () {

    in = fopen("stramosi.in", "r");
    out = fopen("stramosi.out", "w");

    fscanf(in, "%d%d", &n, &q);
    for(i = 1; i <= n; i++) {
            fscanf(in, "%d", &tati[i][1]);
    }
    for(i = 1; i < NRMOSI; i++) {
            for(j = 1; j <= n; j++) {
                tati[j][(i + 1)] = tati[tati[j][i]][i];

            }
    }

    //*
    for(i = 1; i <= n; i++) {
            for(j = 0; j < 5; j++) {
                    printf("%d ", tati[i][j]);
            }
            printf("\n");
    }
    //*/
    for(i = 0; i < q; i++) {
            fscanf(in, "%d%d", &nr, &pers);
            for(j = 0; j <= 18; j++) {
                    if((pers & (1 << j)) != 0) {
                            nr = tati[nr][j + 1];
                    }
            }
            fprintf(out, "%d\n", nr);
    }

    fclose(in);
    fclose(out);

    return 0;
}