Cod sursa(job #419833)

Utilizator S7012MYPetru Trimbitas S7012MY Data 18 martie 2010 01:48:25
Problema Stramosi Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
// stramosi2.cpp : Defines the entry point for the console application.
//



//#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
 
int main() {
   int n,m,i,j,alcui,nivelul;
    FILE *f=fopen("stramosi.in","r");
    FILE *g=fopen("stramosi.out","w");
    fscanf(f,"%d %d",&n,&m);
	//printf("%d %d\n",m,n);
	int *inceput=new int[n+1];
	int *lungime=new int[n+1];
	int *lin1=new int [n+1];
	int *vect=new int [(n+1)*100];
	if (vect==0) return 1;
	int pozc=0, urm,rez;

    lin1[0]=0;
    for(i=1; i<=n; i++) fscanf(f,"%d",&lin1[i]);//construiesc prima linie a matricei
	
	
	for (j=1; j<=n; j++) { //construiesc cate o coloana
		lungime[j]=0; inceput[j]=pozc;
		urm=lin1[j];
		
		while(urm){ 
			vect[pozc++]=urm;
			urm=lin1[urm];
			lungime[j]++;
		}
	}
	/*for (j=1; j<=n; j++) {
		printf("inceput[%d]=%d,lungime[%d]=%d\n",j,inceput[j],j,lungime[j]);
		for (i=0; i<lungime[j]; i++) printf("%3d", vect[inceput[j]+i]);
		printf("\n");
	}
    */
    for(i=0; i<m; i++) {
        fscanf(f,"%d %d",&alcui,&nivelul);
		if(nivelul>lungime[alcui]) rez=0;
		else rez=vect[inceput[alcui]+nivelul-1];
		//printf("%d\n", rez);
        fprintf(g,"%d\n", rez);
    }
    fclose(f);
    fclose(g);
    return 0;
}