Cod sursa(job #531473)

Utilizator tudorsTudor Siminic tudors Data 9 februarie 2011 19:07:15
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <stdio.h>
using namespace std;
int A[19][250001];
int n,m,q,p;
FILE *f,*g;

void citire()
{
	int i;
	fscanf(f,"%d %d",&n,&m);
	for (i=1;i<=n;i++)
		fscanf(f,"%d",&A[0][i]);
}

void produce()
{
	int i,j;
	for (i=1;i<=18;i++)
		for (j=1;j<=n;j++)
			A[i][j]=A[i-1][A[i-1][j]];
}

int stramosi(int p, int q)
{
	int i=0;
	while (p!=0)
	{
		if (p&1)
			q=A[i][q];
		++i;
		p>>=1;
	}
	return q;
}

void rezolva()
{
	int i;
	for (i=1;i<=m;i++)
	{
		fscanf(f,"%d %d",&q,&p);
		fprintf(g,"%d \n",stramosi(p,q));
	}
}

int main()
{
	f=fopen("stramosi.in","r");
	g=fopen("stramosi.out","w");
	citire();
	produce();
	rezolva();
	fclose(f);
	fclose(g);
	return 0;
}