Pagini recente » Cod sursa (job #682177) | Cod sursa (job #414159) | Cod sursa (job #870716) | Cod sursa (job #2646022) | Cod sursa (job #443021)
Cod sursa(job #443021)
#include<fstream>
#include<cstdlib>
#include<vector>
#include<algorithm>
using namespace std;
struct Gutui{
long h;
long w;
int mark;
bool operator() (Gutui a, Gutui b) { if (a.h==b.h) return (a.w<b.w); return (a.h<b.h); }
}gutui;
bool weigthcompare (Gutui a, Gutui b) { return (a.w < b.w);}
int main(){
long n,h,u,u1=0,hmax=0,umax=0;
ifstream fin ("gutui.in");
ofstream fout ("gutui.out");
fin>>n>>h>>u;
Gutui max;
vector<Gutui> g(n);
for (long i=0; i<n; i++)
fin>>g[i].h>>g[i].w;
for (long i=0; i<n; i++)
{
g[i].mark=0;
}
sort(g.begin(),g.end(),gutui);
Gutui aux;
for (long i=0; i<n/2; i++)
{
aux=g[i];
g[i]=g[n-i-1];
g[n-i-1]=aux;
}
long i=0;
while (i<n)
{
if (g[i].h+u1 < h && g[i].mark == 0 && hmax<n)
{
u1+=u;
if (g[i].h+u1 == h)
{
umax+=g[i].w;
//fout<<g[i].w<<endl;
g[i].mark=1;
i++;
}
else
{
max= *max_element(g.begin()+i,g.end(),weigthcompare);
for (long j=i; j<n; j++)
if (g[j].w==max.w && g[j].mark==0)
{
umax+=g[j].w;
//fout<<g[j].w<<endl;
g[j].mark=1;
}
}
}
else
{
g[i].mark=1;
i++;
}
}
//max= *max_element(g.begin()+5,g.end(),weigthcompare);
//fout<<max.h<<" "<<max.w<<endl;
//fout<<endl;
//for (int i=0; i<n; i++)
// fout<<" "<<g[i].h<<" "<<g[i].w<<endl;
fout<<umax<<endl;
fin.close();
fout.close();
return 0;
}