Cod sursa(job #77980)

Utilizator vlad3rsterian vladut vlad3r Data 15 august 2007 12:22:34
Problema Stramosi Scor 50
Compilator c Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>


int main(void)
{

FILE *in,*out;

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


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

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


for(i=0;i<n;i++)
	lung[i]=0;



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


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

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

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

	}

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

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

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


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;
}