Pagini recente » Monitorul de evaluare | Cod sursa (job #3362562) | Cod sursa (job #3362631) | Cod sursa (job #3362670) | Cod sursa (job #3362759)
#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], vv[100005];
bool cmp(lup a, lup b)
{
return a.b > b.b;
}
bool cmpp(lup a, lup b)
{
return a.d > b.d;
}
int main()
{
int a, b, l0, i, cl, cll;
long long int s=0;
fin>>n>>x>>l;
l0=l;
cl=0;
cll=0;
for(int i=1;i<=n;i++)
{
fin>>v[i].d>>v[i].b;
vv[i].d=v1[i].d=v[i].d;
vv[i].b=v1[i].b=v[i].b;
}
sort(vv+1, vv+n+1, cmp);
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;
}
}
int s3=0;
if(l!=0)
{
for(i=x/l+1;i>=1;i--)
vv[i].d=vv[i].b=0;
sort(vv+1, vv+n+1, cmpp);
for(i=1;i<=n;i++)
{
if(vv[i].d+cll<=x)
{
s3+=vv[i].b;
cll+=l0;
}
}
}
s1=max(s1, s3);
if(s1>s) g<<s1;
else g<<s;
fin.close();
g.close();
return 0;
}