Pagini recente » Cod sursa (job #1134463) | Cod sursa (job #1995172) | Cod sursa (job #405389) | Cod sursa (job #2315351) | Cod sursa (job #216596)
Cod sursa(job #216596)
#include<stdio.h>
#include<math.h>
int main()
{
long int n,m,i,matrice[20][3500],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;
}