Cod sursa(job #27789)

Utilizator robbyRobertino robert robby Data 7 martie 2007 09:14:00
Problema Stramosi Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <stdio.h>
#define nmax 250//001
long a[nmax][21],b[nmax];
FILE *f,*g;
int main()
{
  long n,m,i,j,p,q,x,nr,y,k;
  f=fopen("stramosi.in","rt");
  g=fopen("stramosi.out","wt");
  fscanf(f,"%ld %ld\n",&n,&m);
  for (i=1;i<=n;i++)
	{
	  fscanf(f,"%ld",&b[i]);
	  a[i][0]=b[i];
	}
  for (k=1;k<=18;k++)
	for (i=1;i<=n;i++)
	  {
	  a[i][k] = a[ a[i][k-1] ] [k-1];
/*	  x=b[i];
	  y=1;
	  nr=1;
	  while (x&&a[i][0]<11)
		{
		  nr*=2;
		  a[i][++a[i][0]]=x;
		  while (y<nr&&x)
			{
			  y++;
			  x=b[x];
			}
		}*/
	  }


  for (i=1;i<=m;i++)
	{
	  fscanf(f,"%ld %ld\n",&p,&q);
	  while (q&&x)
		{
		  nr=1;
		  y=0;
		  while ((nr<<1)<=q&&y<18)
			{nr=nr<<1;y++;}
		  x=a[p][y];
		  p=x;
		  q-=nr;
		}
	  fprintf(g,"%ld\n",x);
	}
  fclose(f);
  fclose(g);
  return 0;
}