Cod sursa(job #2288418)

Utilizator mariusgrafuMarius Grafu mariusgrafu Data 23 noiembrie 2018 13:01:12
Problema Lupul Urias si Rau Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

struct oaie {
    int d, a;

    oaie(int _d = 0, int _a = 0) {
        d = _d;
        a = _a;
    }

    friend ostream& operator<<(ostream& out, oaie& o) {
        out << "d: " << o.d << " a: " << o.a;
        return out;
    }
};

int strangeLana(int X, int L, vector<oaie> O) {
    sort(O.begin(), O.end(), [](oaie a, oaie b){
         return a.d > b.d;
         });
    /*for(int i = 0; i < O.size(); ++i) {
        cout << O[i] << "\n";
    }*/
    X = min(X, O[0].d);
    int lana = 0;
    int limit = X;

    do {
        limit -= L;
        //cout << "limit: " << limit << "\n";
        int maxL = 0, maxLindex = 0;
        for(int i = 0; i < O.size(); ++i) {
            if(O[i].d <= limit) break;
            if(O[i].a > maxL) {
                maxL = O[i].a;
                maxLindex = i;
            }
        }
        //cout << "best: " << O[maxLindex] << "\n";
        lana += maxL;
        O.erase(O.begin() + maxLindex);
    }while(limit > 0);

    return lana;
}

int main()
{
    ifstream in("lupu.in");
    ofstream out("lupu.out");

    int N, X, L;
    vector<oaie> O;

    in >> N >> X >> L;

    for(int i = 0; i < N; ++i) {
        int d, a;
        in >> d >> a;
        O.push_back(oaie(d, a));
    }

    out << strangeLana(X, L, O);

    in.close(); out.close();
    return 0;
}