Cod sursa(job #216594)

Utilizator k_ounu_eddyIacob Eduard k_ounu_eddy Data 24 octombrie 2008 22:41:48
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<stdio.h>
#include<math.h>

int main()
{      
long int n,m,i,matrice[30][350000],q,p,k=1,raspuns;
FILE *pFile;
FILE *pFileOut;

pFile = fopen ("stramosi.in","r");
pFileOut = fopen("stramosi.out","w");
fscanf(pFile,"%ld %ld",&n,&m);

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

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

for(i=1;i<=m;i++)
  {
  fscanf(pFile,"%ld",&q);
  fscanf(pFile,"%ld",&p);

  k=0;
  while(pow(2,k)<=p) k++;
    if(pow(2,k)>p) k--;

  raspuns=matrice[pow(2,k)][q];
  p=p-pow(2,k);

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

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