Cod sursa(job #395144)

Utilizator mihaionlyMihai Jiplea mihaionly Data 12 februarie 2010 11:11:18
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.56 kb
#include <stdio.h>
#define doila(z) (1<<z)
#define nmax 350010
int A[20][nmax];
int main()
 {
 FILE *f=fopen("stramosi.in","r");
 FILE *g=fopen("stramosi.out","w");
 int n,m,i,j,k,p,q;
 fscanf(f,"%d %d",&n,&m);
 for(i=1;i<=n;i++)
  fscanf(f,"%d ",&A[0][i]);
 for(i=1;doila(i)<=n;++i)
  {
  for(j=1;j<=n;++j)A[i][j]=A[i-1][A[i-1][j]];
  }
 for(k=1;k<=m;++k)
  {
  fscanf(f,"%d %d",&p,&q);
  while(p && q)
   for(i=q;i>=0 && p && q;--i)
	if(doila(i)<=q && p && q)
	 {
	 p=A[i][p];
	 q-=doila(i);
	 }
  fprintf(g,"%d\n",p);
  }
 return 0;
 }