Cod sursa(job #77934)

Utilizator vlad3rsterian vladut vlad3r Data 15 august 2007 10:27:43
Problema Stramosi Scor 50
Compilator c Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <stdio.h>
//#include <conio.h>
#include <string.h>
#include <stdlib.h>


int main(void)
{

FILE *in,*out;

long **v,i,next,n,cate;
long rasp,j,*lung;


in=fopen("stramosi.in","r");
fscanf(in,"%ld",&n);
fscanf(in,"%ld",&cate);

v=(long **)malloc(n*sizeof(long *));
lung=(long *)malloc(n*sizeof(long ));

//for(i=0;i<n;i++)
  //	v[i]=(long *)malloc(50*sizeof(long));

for(i=0;i<n;i++)
	{
	lung[i]=0;
      //for(j=0;j<50;j++)
	//	v[i][j]=0;
	}



fscanf(in,"%ld",&rasp);
v[0]=(long *)malloc(2*sizeof(long));
lung[0]=1;
v[0][1]=rasp;


for(i=1;i<n;i++)
	{

	fscanf(in,"%ld",&rasp);

	if(rasp!=0)
		{
		v[i]=(long *)malloc((lung[rasp-1]+2)*sizeof(long));
		memcpy(v[i],v[rasp-1],sizeof(long)*(lung[rasp-1]+1));
		lung[i]=lung[rasp-1]+1;
		v[i][lung[i]]=rasp;
		}

/*	for(j=0;j<13;j++)
		printf("%ld ",v[i][j]);
	printf("\n");
	getch();
*/
	}

out=fopen("stramosi.out","w");

for(i=0;i<cate;i++)
	{
	fscanf(in,"%ld",&next);
	fscanf(in,"%ld",&j);

	if(j>lung[next-1])
		fprintf(out,"0\n");
	else
		fprintf(out,"%ld\n",v[next-1][lung[next-1]-j+1]);
	}

/*
printf("\n");
for(i=0;i<5;i++)
	printf("%ld ",v[0][i]);
printf("\n");
  //	{
    //	printf("\n");
for(j=0;j<n;j++)
	printf("%ld ",lung[j]);

getch();
getch();
*/


for(i=0;i<n;i++)
	{free(v[i]);
	v[i]=0;}
free(v);
v=0;
free(lung);
lung=0;
fclose(in);
fclose(out);


return 0;
}