Cod sursa(job #761063)

Utilizator visanrVisan Radu visanr Data 24 iunie 2012 16:24:19
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;


char s1[2000000], s2[30];
int N, M, F[19][250001];


int main()
{
    freopen("stramosi.in", "r", stdin);
    freopen("stramosi.out", "w", stdout);
    int i, j, number = 0, lg, cnt = 1;
    fgets(s2, 30, stdin);
    lg = strlen(s2) - 1;
    for(i = 0; i < lg; i++) 
          if(s2[i] == ' ') 
                  N = number, number = 0;
          else
              number = number * 10 + s2[i] - '0';
    M = number;
    number = 0;
    fgets(s1, 2000000, stdin);
    lg = strlen(s1) - 1;
    for(i = 0; i < lg; i++)
          if(s1[i] == ' ')
                   F[0][cnt ++] = number, number = 0;
          else number = number * 10 + s1[i] - '0';
    F[0][cnt ++] = number;
    for(i = 1; (1 << i) <= N; i++)
          for(j = 1; j <= N; j++) 
                F[i][j] = F[i - 1][F[i - 1][j]];
    while(M --)
    {
            fgets(s2, 30, stdin);
            lg = strlen(s2) - 1;
            int p, q;
            number = 0;
            for(i = 0; i < lg; i++) 
                  if(s2[i] == ' ') 
                           p = number, number = 0;
                  else number = number * 10 + s2[i] - '0';
            q = number;
            for(i = 0; (1 << i) <= q; i++)
                  if(q & (1 << i))
                       p = F[i][p];
            printf("%i\n", p);
    }
    scanf("%i", &i);
    return 0;
}