Cod sursa(job #1749086)

Utilizator DevilOnFieldTudor Horia Niculescu DevilOnField Data 27 august 2016 20:45:26
Problema Lupul Urias si Rau Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<stdio.h>
#include<queue>
#include<algorithm>
#include<unistd.h>

FILE *in, *out;

using namespace std;

struct ovina
{
	int lana, poz;
};

ovina grupu[100000];

bool compdis(ovina i, ovina j)
{
    return i.poz < j.poz;
}

int main ()
{

    int oi, dpas, dmax, i, prima;
    long long s;

	in = fopen("lupu.in", "r");
	out = fopen("lupu.out", "w");

	fscanf(in, "%d%d%d", &oi, &dmax, &dpas);

	for(i = 0; i <= oi; i++) {
        fscanf(in, "%d%d", &grupu[i].poz, &grupu[i].lana);
    }

    sort(grupu, grupu + oi, compdis);
/*
    for(i = 0; i < oi; i++) {
        printf("%2d ", grupu[i].poz);
    } printf("\n");
    for(i = 0; i < oi; i++) {
        printf("%2d ", grupu[i].lana);
    } printf("\n");
*/

    priority_queue<int> leheap;

    prima = dmax % dpas;
    i = 0;
    s = 0;
    do {
        //printf("%d ", prima);
        while(i < oi && grupu[i].poz <= prima) {
            leheap.push(grupu[i].lana);
            //write(1, "caca", 4);
            i++;
        }
        if(leheap.size() > 0) {
            s = s + leheap.top();
            leheap.pop();
        }
        //printf("%lld\n", s);
        //fflush(stdout);
        prima = prima + dpas;
    }
    while(prima <= dmax);

    fprintf(out, "%lld", s);

    fclose(in);
    fclose(out);

    return 0;
}