Cod sursa(job #1699614)

Utilizator stoianmihailStoian Mihail stoianmihail Data 7 mai 2016 22:17:32
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <stdio.h>

#define Nadejde 250000
#define BASE 10
#define MAX_LOG 5

int N, M;
int dad[MAX_LOG + 1][Nadejde + 1];
int shl[MAX_LOG + 1];

int main(void) {
  int i, u, x;
  FILE *f = fopen("stramosi.in", "r");

  shl[0] = 1;
  for (i = 1; i <= MAX_LOG; i++) {
    shl[i] = shl[i - 1] * BASE;
  }

  fscanf(f, "%d %d", &N, &M);
  for (u = 1; u <= N; u++) {
    fscanf(f, "%d", &dad[0][u]);
  }

  for (i = 1; i <= MAX_LOG; i++) {
    for (u = 1; u <= N; u++) {
      dad[i][u] = dad[i - 1][dad[i - 1][u]];
    }
  }

  freopen("stramosi.out", "w", stdout);
  while (M) {
    fscanf(f, "%d %d", &u, &x);
    for (i = MAX_LOG; i >= 0; i--) {
      while (x >= shl[i]) {
        u = dad[i][u];
        x -= shl[i];
      }
    }
    fprintf(stdout, "%d\n", u);
    M--;
  }
  fclose(f);
  fclose(stdout);

  /// Multumim Doamne!
  puts("Doamne ajuta!");
  return 0;
}