Cod sursa(job #305001)

Utilizator APOCALYPTODragos APOCALYPTO Data 15 aprilie 2009 22:51:40
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<stdio.h>

int main()
{
long int n,m,i,q,p,k=1,raspuns,**matrice;
FILE *pFile= fopen ("stramosi.in","r");
FILE *pFileOut= fopen("stramosi.out","w");

fscanf(pFile,"%ld %ld",&n,&m);
matrice=new long int*[19];
for(i=1;i<19;i++)
  matrice[i]=new long int[n+1];

for(i=1;i<=n;i++)
  fscanf(pFile,"%ld",&matrice[1][i]);

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


  for(i=1;i<=m;i++)
  {
  fscanf(pFile,"%ld",&q);
  fscanf(pFile,"%ld",&p);
  k=0;
  while((1<<k)<p) k++;
  if((1<<k)>p) k--;

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

  while(p!=0)
    {
    k=0;
    while((1<<k)<p) k++;
      if((1<<k)>p) k--;
    raspuns=matrice[k+1][raspuns];
    p=p-(1<<k);
    }
  fprintf(pFileOut,"%ld \n",raspuns);
  }




fclose(pFile);
fclose(pFileOut);
return 0;
}