Cod sursa(job #2393185)

Utilizator cezar.plescaCezar Plesca cezar.plesca Data 30 martie 2019 23:00:30
Problema Lupul Urias si Rau Scor 8
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#include<stdio.h>
#include<set>
#include<vector>
#include<algorithm>

using namespace std;

int N,X,L;

struct Cmp
{
    bool operator ()(const pair<int,int> &a, const pair<int,int> &b)
    {
		if(a.first == b.first)
			return a.second > b.second;
		return a.first > b.first;
    }
};

struct less_than_key
{
    inline bool operator() (const pair<int,int> &a, const pair<int,int> &b)
    {
        if(a.first == b.first)
			return a.second < b.second;
		return a.first > b.first;
    }
};

//multiset<pair<int,int>,Cmp> oite;
vector<pair<int,int>> oite;
int maxTime;

long long blana(){
	//multiset<pair<int,int>,Cmp>::iterator it;
	vector<pair<int,int>>::iterator begin,end;
	long long B=0;
	begin=oite.begin();
	end=oite.end();

	int time=maxTime;

	int pas=0;
	while(begin!=end){
		if((*begin).second>=pas){			
			B=B+(*begin).first;			
			pas++;
		}
		begin++;
	}
	return B;
}

int main(){

	freopen("lupu.in","r",stdin);
	freopen("lupu.out","w",stdout);
	
	scanf("%d %d %d",&N,&X,&L);

	int d,v,t;
    for (int i = 0; i < N; i++) {
        scanf("%d %d",&d,&v);
		if(d<=X){
			//oite.insert(make_pair(v,d));
			t=(X-d)/L;
			if(t>maxTime)
				maxTime=t;
			oite.push_back(make_pair(v,t));
		}
	}

	sort(oite.begin(),oite.end(),less_than_key());
	long long result=blana();
	printf("%lld\n",result);

    return 0;
}