Cod sursa(job #1714348)

Utilizator enacheionutEnache Ionut enacheionut Data 7 iunie 2016 22:59:38
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<stdio.h>
#include<queue>
 
FILE *in, *out;
 
int N,M;
 
#define MAX 250001
 
 
int D[18][MAX],pos=0;
char buf[10000];
 
 
int readNumber(FILE *&f)
{
    int nr = 0;
    while (buf[pos] < '0' || buf[pos]>'9')
    {
        ++pos;
        if (pos == 10000)
        {
            pos = 0;
            fread(buf, 1, 10000, in);
        }
    }
 
    while (buf[pos] >= '0' && buf[pos]<='9')
    {
        nr = nr * 10 + (buf[pos] - '0');
        ++pos;
        if (pos == 10000)
        {
            pos = 0;
            fread(buf, 1, 10000, in);
        }
    }
     
    return nr;
}
 
int main()
{
    in = fopen("stramosi.in", "r");
    out = fopen("stramosi.out", "w");
 
    fread(buf, 1, 10000, in);
    N=readNumber(in);
    M=readNumber(in);
 
    for (int i = 1;i <= N;++i)
        D[0][i] = readNumber(in);
 
    int i, j;
    for (i = 1;(1 << i) <= N;++i)
        for (j = 1;j <= N;++j)
            D[i][j] = D[i - 1][D[i - 1][j]];
 
    int P, Q;
    for (i = 1;i <= M;++i)
    {
        Q=readNumber(in);
        P=readNumber(in);
        for (j = 0;P;P >>= 1, ++j)
            if (P & 1)
                Q = D[j][Q];
        fprintf(out, "%d\n", Q);
    }
 
     
    return 0;
}