Cod sursa(job #1042761)

Utilizator tavi.belu1994FMI Belu Andrei Octavian tavi.belu1994 Data 27 noiembrie 2013 17:38:00
Problema Stramosi Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <iostream>
#include <cstdio>
FILE *f,*g;
using namespace std;

int N,M,T[251000][2000];

void read()
{
    fscanf(f,"%d%d\n",&N,&M);
    for(int i=1;i<=N;i++)
    {
        fscanf(f,"%d",&T[0][i]);
    }
}

void make_stramosi()
{
    int k=1;
    while(1<<k < N)
    {
        for(int i=1;i<=N;i++)
            T[k][i]=T[k-1][T[k-1][i]];
        k++;
    }
}

int main()
{
    f=fopen("stramosi.in","r");
    g=fopen("stramosi.out","w");
    read();
    make_stramosi();
    for(int i=1;i<=M;i++)
    {
        int j,Q,P;
        fscanf(f,"%d%d\n",&Q,&P);
        while(P!=0)
        {
            for( j=20 ; j>=0 && (1<<j) > P ; j--);
            Q=T[j][Q];
            P-=(1<<j);
        }

        fprintf(g,"%d\n",Q);
    }
    fclose(f);
    fclose(g);
    return 0;
}