Cod sursa(job #1847703)

Utilizator ciprianprohozescuProhozescu Ciprian ciprianprohozescu Data 14 ianuarie 2017 21:27:09
Problema Lupul Urias si Rau Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
#include <algorithm>
#include <queue>

using namespace std;

FILE *fin, *fout;

struct oaie
{
    int t, a;
};

int nr, x, l, s, n;
oaie o[100010];
priority_queue<int> q;

void citire();
bool crit(oaie a, oaie b);
void rezolvare();

int main()
{
    citire();
    rezolvare();
    fprintf(fout, "%d\n", s);
    fclose(fout);
    return 0;
}

void citire()
{
    int i, lg;
    fin = fopen("lupu.in", "r");
    fout = fopen("lupu.out", "w");
    fscanf(fin, "%d%d%d", &nr, &x, &l);
    for (i = 1; i <= nr; i++)
    {
        fscanf(fin, "%d%d", &lg, &o[i].a);
        if (x >= lg)
            o[i].t = (x - lg) / l + 1;
    }
    sort(o + 1, o + nr + 1, crit);
}
bool crit(oaie a, oaie b)
{
    return a.t > b.t;
}
void rezolvare()
{
    int i = 1, zi, j;
    zi = o[1].t;
    if (x > 0)
    {
        while (zi > 0)
        {
            while (o[i].t == zi)
            {
                q.push(o[i].a);
                i++;
            }
            for (j = 1; j <= zi - o[i].t && !q.empty(); j++)
            {
                s += q.top();
                q.pop();
            }
            zi = o[i].t;
        }
    }
}