Cod sursa(job #129194)

Utilizator DITzoneCAdrian Diaconu DITzoneC Data 28 ianuarie 2008 19:10:54
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <stdio.h>

#define ptdoi 18

typedef long int lint;

long v[ptdoi]={1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072};
lint par[250001][ptdoi];

int main()
  {
     FILE *fi=fopen("stramosi.in","r"),
	  *fo=fopen("stramosi.out","w");
     lint n,m,i,j,q,p;
     fscanf(fi,"%ld %ld",&n,&m);
     for(i=1;i<=n;i++)
       fscanf(fi,"%ld",&par[i][0]);
     for(i=1;i<=n;i++)
       for(j=1;j<ptdoi;j++)
	 par[i][j]=par[par[i][j-1]][j-1];
     for(j=1;j<=m;j++)
       {
	  fscanf(fi,"%ld %ld",&q,&p);
	  i=ptdoi-1;
	  while (p)
	    {
	       while(v[i]>p) i--;
	       p-=v[i];
	       q=par[q][i];
	    }
	  fprintf(fo,"%ld\n",q);
       }
     fclose(fi);
     fclose(fo);
     return(0);
  }