Cod sursa(job #305015)

Utilizator APOCALYPTODragos APOCALYPTO Data 15 aprilie 2009 23:04:38
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<fstream.h>
#include<math.h>
int main()
{long int **b,k,i,j,m,n,p,q,raspuns;
ofstream g("stramosi.out");
ifstream f("stramosi.in");

    f>>n>>m;
    b=new long int*[19];
    for(i=1;i<19;i++)
      b[i]=new long int[n+1];
    for(i=1;i<=n;i++)
        f>>b[1][i];

    k=1;
    do{k++;
       for(i=1;i<=n;++i) b[k][i]=b[k-1][b[k-1][i]];

      }while((1<<k)<=n);
    for(i=1;i<=m;i++)
      {f>>q>>p;
        k=0;
        while((1<<k)<p) k++;
        if((1<<k)>p) k--;

        raspuns=b[k+1][q];
        p=p-(1<<k);

        while(p!=0)
        {
         k=0;
         while((1<<k)<p) k++;
            if((1<<k)>p) k--;
         raspuns=b[k+1][raspuns];
         p=p-(1<<k);
         }
      g<<raspuns<<'\n';
      }
 for(int i=1;i<19;i++)
  delete b[i];

delete b;
f.close();
g.close();

    return 0;
}