Cod sursa(job #129094)

Utilizator tErMyAndrei Panturu tErMy Data 28 ianuarie 2008 17:24:10
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
 #include <stdio.h>  
 #define MAX 250002  
 #define MIN 21  
 FILE *fin,*fout;  
   
 long k,w,n,d,m,o,i,j,p,q,a[MIN][MAX];  
   
 void lo(long p,long &r,long &t)  
 {long k=0,l=1;  
 while (p>=l){k++;l*=2;}  
 r=k-1;  
 t=l/2;  
   
 }  
  
 int main()  
 {  
 fin=fopen("stramosi.in","rt");  
 fout=fopen("stramosi.out","wt");  
 fscanf (fin,"%ld %ld\n",&n,&m);  
 for (i=1;i<=n;i++) fscanf (fin,"%ld",&a[0][i]);  
 j=1;  
 lo(n,w,k);  
 while (j<=w)  
     {  
       for (i=1;i<=n;i++) a[j][i]=a[j-1][a[j-1][i]];  
       j++;  
   
   
     }  
 for (i=1;i<=m;i++)  
     {  
     fscanf (fin,"%ld %ld\n",&q,&p);  
     if (p<=1)  fprintf(fout,"%ld\n",a[0][q]);  
   
     else  
     {k=0;  
      w=0;  
     while (k<p)  
     {  
     lo(p,w,k);  
     q=a[w][q];  
     /*o=a[q]; 
     q=o;*/  
     p-=k;  
     k=0;  
     if (q==0) break;  
     }  
  49.     fprintf(fout,"%ld\n",q);}  
  50.     }  
  51.   
  52.   
  53. fcloseall();  
  54. return 0;  
  55. }