Cod sursa(job #68700)

Utilizator chermanCorina Herman cherman Data 29 iunie 2007 10:08:21
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <stdio.h>
#include <iostream>
#include <math.h>

using namespace std;


#define NMAX 250001

int ***stramosi;
int nr[20];

FILE *in = fopen("stramosi.in", "r"), *out = fopen("stramosi.out", "w");
int n, m,k;

inline int cauta(int pers, int ordin)
{
    //printf("\n%d-%d\n",pers,ordin);

    int oldpers=pers;

    if (nr[oldpers]>=ordin)//(stramosi[oldpers][ordin]!=NULL)
        pers=(int)stramosi[oldpers][ordin];
    else
       // printf("\naici\n");
       //printf("\n%d-%d\n",(int)stramosi[pers][0]-1,ordin-1);

        if (ordin>0)
            if ((int)stramosi[pers][0]>0)
              pers=cauta((int)stramosi[pers][0]-1,ordin-1);
            else
              pers=0;
        else
           pers=(int)stramosi[pers][0];


   int * temp;
    temp=new int;
    *temp=pers;
    stramosi[oldpers][ordin]=temp;

 if(nr[oldpers]<ordin) nr[oldpers]=ordin;

  return pers;
}

int main ()
{
	int temp1, temp2;

	fscanf(in, "%d %d", &n, &m);


    stramosi = (int***)malloc(sizeof(int**)*n);

    for (int a = 0; a < n; a++)
        stramosi[a] = (int**)malloc(sizeof(int*)*1);

	for ( int i = 0; i != n; ++i )
	{
		fscanf(in, "%d", &stramosi[i][0]);
		nr[i]=0;
	}

//	for ( int i = 0; i != n; ++i )
//	{
//		printf("%d %d\n", stramosi[i][0],nr[i]);
//	}
//
//    printf("\n****\n");

	for ( int i = m-1; i != -1; --i )
	{

	    fscanf(in, "%d %d", &temp1, &temp2);
//	    printf("%d %d \n****\n",temp1,temp2);
	    k=cauta(temp1-1, temp2-1);
	    fprintf(out, "%d\n",k );
	    //printf("%d\n", k);
     }

	return 0;
}