Cod sursa(job #332838)

Utilizator dodgerblueBogdan P. dodgerblue Data 20 iulie 2009 14:17:37
Problema Stramosi Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.59 kb
#include<stdio.h>
#include<stdlib.h>

int main()
{
	FILE *f,*g;
	int n,m,p,q,i,j;
	int *a,*b[20];
	f=fopen("stramosi.in","r");
	g=fopen("stramosi.out","w");
	
	fscanf(f,"%d%d",&n,&m);
	a=(int*)malloc((n+1)*sizeof(int));
	for(i=0;i<20;i++)
		b[i]=(int*)malloc((n+1)*sizeof(int));
		
	for(i=1;i<=n;i++)
	{
		fscanf(f,"%d",&a[i]);
		b[0][i]=a[i];
	}
	
	for(j=1;j<20;j++)
		for(i=1;i<=n;i++)
			b[j][i]=b[j-1][b[j-1][i]];
	
	for(i=1;i<=m;i++)
	{
		fscanf(f,"%d%d",&q,&p);
		for(j=19;j>=0;j--)
			if(p&(1<<j))
			{
				q=b[j][q];
				p-=1<<j;
			}
		fprintf(g,"%d\n",q);
	}
	
	fclose(f);
	fclose(g);
	return 0;
}