Cod sursa(job #1319316)

Utilizator costyv87Vlad Costin costyv87 Data 16 ianuarie 2015 21:02:15
Problema Lupul Urias si Rau Scor 80
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I Marime 1.1 kb
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#define D first
#define L second
using namespace std;
FILE *f,*g;


vector < pair<int,int> >v;
priority_queue <int> H;

int n,x,l,i,sol=0,cn;

int main()
{
    f=fopen("lupu.in","r");
    g=fopen("lupu.out","w");

    fscanf(f,"%d%d%d",&n,&x,&l);
    v.resize(n);


    for (i=0;i<n;i++)
    {
        fscanf(f,"%d%d",&v[i].D,&v[i].L);
        if (x<v[i].D)
            v[i].D = -2;
        else
            v[i].D = (x-v[i].D)/l;
    }

    sort(v.begin(),v.end());



    for (i=n-1,cn = v[n-1].D;i>=0 && v[i].D!=-2;i--)
    {
        if (cn == v[i].D)
        {
            H.push(v[i].L);
            continue;
        }

        if (H.size() > 0)
        {
            sol += H.top();
            H.pop();
            cn--;
            i++;
        }
        else
        {
            cn = v[i].D;
            i++;
        }
    }

    while (cn > -1 && H.size()>0)
    {
        cn--;
        sol+=H.top();
        H.pop();
    }
    fprintf(g,"%d",sol);

    return 0;
}