Cod sursa(job #1649550)

Utilizator jordasIordache Andrei Alexandru jordas Data 11 martie 2016 14:07:37
Problema Stramosi Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#define nMax 250001
#include <fstream>
#include <iomanip>

using namespace std;

 ifstream x ("stramosi.in");
 ofstream y ("stramosi.out");

 int n,m;
 int v[nMax];
 int trick[19][nMax];

 int We_have_to_go_deeper(int level, int q, int p)
 {
     if(level==18)
        return 0;

     if(p==0)
        return q;

     if(p%2==1)
     {
         level++;
         return We_have_to_go_deeper(level,trick[level][q],p/2);
     }

     while(p%2==0)
     {
         level++;

         p/=2;
     }

     return We_have_to_go_deeper(level,trick[level][q],p);
 }

 void Molecular_Animations_Generated_InterCacodemomanic()
 {
     //cacodemomania --> pathological belief that one is inhabited by an evil spirit
     int i,j;

     for(i=1;i<=18;i++)
        for(j=1;j<=n;j++)
            trick[i][j]=trick[i-1][trick[i-1][j]];
 }

int main()
{
    int i,j;

    x>>n>>m;

    for(i=1;i<=n;i++)
        x>>trick[0][i];

    Molecular_Animations_Generated_InterCacodemomanic();
/*
    for(i=0;i<=18;i++)
    {
        for(j=1;j<=n;j++)
            y<<setw(3)<<trick[i][j];
        y<<'\n';
    }
    y<<'\n';
*/
    int q,p;
    int level;

    for(i=0;i<m;i++)
    {
        x>>q>>p;

        level=0;

        while(p%2==0)
        {
            level++;

            p/=2;
        }

        y<<We_have_to_go_deeper(level,trick[level][q],p/2)<<'\n';
    }

    return 0;
}