Cod sursa(job #1218212)

Utilizator allexx2200Atanasiu Alexandru-Marian allexx2200 Data 9 august 2014 23:30:41
Problema Stramosi Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

#define IN  "prim.in"
#define OUT "prim.out"

#define ERR 1
int main()
{
	FILE *in = fopen(IN, "rt");
	FILE *out = fopen(OUT, "wt");	
	//if(!in || !out) return ERR;
	
	int n,ln,m,i,j,**mat,p,q;
	fscanf(in, "%d %d", &n, &m);
	ln = ((int) log((double)n)/log(2)) + 1;
	
	printf("n=%d\nln=%d\nm=%d\n", n, ln, m);
	
	mat = (int**)malloc(ln*sizeof(int*));
	//if(!mat) return ERR;
	
	for(i=0; i < ln; i++){
		mat[i] = (int*)calloc(n,sizeof(int));
		//if(!mat[i]) return ERR;
	}
	
	for(i = 1; i <= n; i++){
		fscanf(in, "%d", &j);
		mat[0][i] = j;
	}
	
	for(i = 1; i < ln; i++){
		for(j = 1; j <= n; j++)
			mat[i][j] = mat[i-1][mat[i-1][j]];
	}
	
	for(i = 1; i <= m; i++){
		fscanf(in, "%d %d", &q, &p);
		j = 0;
		while(p){
			if(p & 1){
				q = mat[j][q];
			}
			p = p>>1;
			j++;
		}
		fprintf(out, "%d\n", q);
	}
	
	for(i=0; i < ln; i++){
		free(mat[i]);
	}
	free(mat);
	fclose(in);
	fclose(out);
	
	return 0;
}