Pagini recente » Cod sursa (job #3362692) | Istoria paginii utilizator/sam95 | Monitorul de evaluare | Cod sursa (job #3362570) | Cod sursa (job #3362742)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("lupu.in");
ofstream g("lupu.out");
int n, x, l;
struct lup{
int d, b;}v[100005], v1[100005];
bool cmp(lup a, lup b)
{
return a.b > b.b;
}
int main()
{
int a, b, l0, i, cl, jj;
long long int s=0;
fin>>n>>x>>l;
l0=l;
cl=0;
for(int i=1;i<=n;i++)
{
fin>>v[i].d>>v[i].b;
v1[i].d=v[i].d;
v1[i].b=v[i].b;
}
sort(v1 + 1, v1 + n + 1, cmp);
int k=1, j;
if(l==0)
{
for(i=1;i<=n;i++)
if(v[i].d<=x) s+=v[i].b;
}
else
{while(k!=0)
{
k=0;
int max=0;
for(i=1;i<=n;i++)
{
if(v[i].d<=x)
if(v[i].d+l>x && v[i].b>max)
{
j=i;
max=v[i].b;
}
}
s+=max;
for(i=1;i<=n;i++)
if(v[i].d+l>x)
{
v[i].b=-1;
v[i].d=-1;
}
for(i=1;i<=n && k!=1;i++)
{
if(v[i].b!=-1) k=1;
}
l+=l0;
}
}
k=1;
int s1=0;
for(i=1;i<=n&&k!=0;i++)
{
if(v1[i].d<=x)
if(v1[i].d+cl<=x)
{
s1+=v1[i].b;
cl+=l0;
}
else {
k=0;
}
}
if(s1>s) g<<s1;
else g<<s;
fin.close();
g.close();
return 0;
}