Cod sursa(job #788730)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 15 septembrie 2012 18:28:29
Problema Stramosi Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<cstdio>
using namespace std;
int m,n,i,j,desc[300001][6],p[250001],q[250001],nrs[250001],alzeces[300001];
int stramos(int membru, int alcpre)
{
    int temp=0;
    temp=desc[membru][1];
	for(j=1;j<alcpre;j++)
	{
		temp=desc[temp][1];
		if(temp==0)
		{
			break;
		}
	}
//	printf("%d:%d\n",i,temp);
    return temp;

}
int main()
{
	freopen("stramosi.in","r",stdin);
	freopen("stramosi.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)
	{
	    scanf("%d",&desc[i][1]);
	}
	for(i=1;i<=m;i++)
	{
		scanf("%d",&q[i]);
		scanf("%d",&p[i]);
	}
	for(i=1;i<=n;i++)
	{
        desc[i][2]=stramos(i,10);
        desc[i][3]=stramos(i,100);
        desc[i][4]=stramos(i,550);
	}
	for(i=1;i<=m;i++)
	{
	    int temp1=p[i];
	    int temp2=q[i];
        while(temp1>=550)
        {
            temp2=desc[temp1][4];
            temp1-=550;
        }
        while(temp1>=100)
        {
            temp2=desc[temp1][3];
            temp1-=100;
        }
        while(temp1>=10)
        {
            temp2=desc[temp1][2];
            temp1-=10;
        }
        if(temp1==0)
        {
            printf("%d\n",temp2);
        }
        else
        {
            printf("%d\n",stramos(temp2,temp1));
        }
    }

	fclose(stdin);
	fclose(stdout);
	return 0;
}