Cod sursa(job #1423976)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 23 aprilie 2015 04:58:52
Problema Stramosi Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <vector>
#include <fstream>
#include <cmath>
using namespace std;

void fa_tabel_stramosi(vector<vector<int> >& tabel_stramosi){
	bool am_facut_ceva = true;
	for(int i = 1, intermediar; am_facut_ceva; ++i){
		am_facut_ceva = false;
		for(int j = 0; j < tabel_stramosi.size(); ++j){
			if(tabel_stramosi[j][i-1] != 0){
				am_facut_ceva = true;
				tabel_stramosi[j][i] = tabel_stramosi[tabel_stramosi[j][i-1]][i-1]; } } } }

int get_ans(const vector<vector<int> >& tabel_stramosi, int num, int h){
	for(int i = 0; h; ++i){
		if(h & (1<<i)){
			num = tabel_stramosi[num][i];
			h ^= (1<<i); } }
	return num; }

int main(){
	ifstream f("stramosi.in");
	int n = 0, q = 0;
	f >> n >> q;
	const int nr_max_stramosi = log2(n+1);
	vector<vector<int> > tabel_stramosi(n+1, vector<int>(nr_max_stramosi+1, 0));
	for(int i = 1; i <= n; ++i){
		f >> tabel_stramosi[i][0]; }
	fa_tabel_stramosi(tabel_stramosi);
	ofstream g("stramosi.out");
	for(int i = 0, num, h; i < q; ++i){
		f >> num >> h;
		g << get_ans(tabel_stramosi, num, h) << '\n'; }
	return 0; }