Mai intai trebuie sa te autentifici.
Cod sursa(job #1301202)
| Utilizator | 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; }
