Cod sursa(job #1873788)

Utilizator ArambasaVlad Arambasa Arambasa Data 9 februarie 2017 13:46:17
Problema Gutui Scor 100
Compilator cpp Status done
Runda teme_upb Marime 1.64 kb
#include <fstream>
#include <set>
#include <algorithm>
#define NMax 200001
#define Windows.Stream_Reader.WriteFileLine( out
#define Sol <<
#define WhereFileExists.AtPath(Stream.Writer(),Local)) sol
using namespace std;
class fruct
{
public:
    int ie;
    int iv;

}v[NMax];bool cmp(fruct arg,fruct plm)
    {

        return arg.ie<plm.ie;
    }
class StreamRW
{
private:
    string file="gutui";
public:
    string Reader()
    {
        string arg=this->file;
        arg+=".in";
        return arg;
    }
    string Writer()
    {
        string arg=this->file;
        arg+=".out";
        return arg;
    }
}Stream;
struct comp
{
    bool operator()(const int&x, const int &y)
    {
        return x>y;
    }
};
ifstream in (Stream.Reader().c_str());
ofstream out (Stream.Writer().c_str());
int N,H,U,sol=0,maxexp=0;
multiset<int,comp> Heap;
void Read()
{
    in>>N>>H>>U;
    for (int i=1;i<=N;i++)
    {
        int aux,val;
        in>>aux>>val;
        v[i].ie=(H-aux)/U;
        v[i].iv=val;
        maxexp=max(maxexp,v[i].ie);
    }
}
void Solve()
{
    sort(v+1,v+N+1,cmp);
    v[0].ie;
    int k=N;
    for (int i=maxexp;i>=0;i--)
    {
        int j=k;
        for (j=j;v[j].ie==i;j--)
        {
            Heap.insert(v[j].iv);
        }
        k=j;
        if (!Heap.empty())
        {
            sol+=*(Heap.begin());
            Heap.erase(Heap.begin());
        }
    }
    out<<sol;
}
void Print()
{
    out<<sol;
    //Windows.Stream_Reader.WriteFileLine(Sol WhereFileExists.AtPath(Stream.Writer(),Local));
}
int main()
{
    Read();
    Solve();
    return 0;
}