Cod sursa(job #1301202)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 25 decembrie 2014 18:21:51
Problema Stramosi Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <vector>
using std::vector;

#include <fstream>
using std::ifstream;
using std::ofstream;

#include <iostream>
using std::cout;

class stramosi_memoizat{
	const vector<int>& stramosi;
	vector<vector<int> > memoizare;
	void adauga_stramos_la(const int persoana){
		const int ultimul_stramos = *memoizare[persoana].rbegin();
		const int stramos_nou = stramosi[ultimul_stramos];
		memoizare[persoana].push_back(stramos_nou); }
public:
	stramosi_memoizat(const vector<int>& S, const int n):
		stramosi(S),
		memoizare(n+1){
		for(int i = 0; i <= n; ++i){
			memoizare[i].push_back(i); } }
	int operator()(const int grad, const int persoana){
		while(memoizare[persoana].size() <= grad){
			adauga_stramos_la(persoana); }
		return memoizare[persoana][grad]; } };

int main(){
	ifstream f("stramosi.in");
	ofstream g("stramosi.out");
	int marime_familie = 0, nr_intrebari;
	f >> marime_familie >> nr_intrebari;
	vector<int> stramosi(marime_familie+1, 0);
	for(int i = 1; i <= marime_familie; ++i){
		f >> stramosi[i]; }
	stramosi_memoizat s(stramosi, marime_familie);
	for(int i = 0; i < nr_intrebari; ++i){
		int P = 0, Q = 0;
		f >> Q >> P;
		//nu inteleg de ce, in problema, zic al P-lea stramos al lui Q
		// dar ne dau datele cu Q mai intai!!
		g << s(P, Q) << '\n'; }
	return 0; }