Pagini recente » Cod sursa (job #1606854) | Cod sursa (job #349539) | Cod sursa (job #2810823) | Cod sursa (job #239452) | Cod sursa (job #3143813)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
struct oaie{
int lana,dist;
};
struct nr{
int l,zile;
};
bool sor(oaie a,oaie b)
{
if(a.dist!=b.dist)
{
return a.dist<b.dist;
}
else return a.lana>b.lana;
}
bool sor1(nr a,nr b)
{
if(a.l!=b.l)
return a.l>b.l;
else return a.zile<b.zile;
}
int main()
{
ifstream cin("lupu.in");
ofstream cout("lupu.out");
int n;cin>>n;
int x,l;
cin>>x>>l;
oaie v[n];
for(int i=0;i<n;i++)
{
cin>>v[i].dist>>v[i].lana;
v[i].dist=(x-v[i].dist)/l+1;
}
sort(v,v+n,sor);
nr v1[n];
int k=0;
int distact=v[0].dist;
int a=0;
for(int i=0;i<n;i++)
{
a=0;
while(v[i].dist<distact)
i++;
while(v[i].dist==distact && a<distact)
{
v1[k].l=v[i].lana;
v1[k++].zile=v[i].dist;
a++;
i++;
}
if(v[i].dist!=distact)
i--;
distact++;
}
sort(v1,v1+k,sor1);
int zc=1;
long long sum=0;
for(int i=0;i<k;i++)
{
if(v1[i].zile>=zc)
{
sum+=v1[i].l;
zc++;
}
}
cout<<sum;
return 0;
}