Pagini recente » Cod sursa (job #1716083) | Istoria paginii runda/simulareaii/clasament | Cod sursa (job #1898435) | Clasament ultimapregatireomi | Cod sursa (job #705397)
Cod sursa(job #705397)
#include<iostream>
#include<fstream>
#include<algorithm>
#include<bitset>
using namespace std;
struct raport {
float val;
int poz;
};
int e[1002],c[1002];
raport v[1001];
bitset <1001> d;
inline bool cmp(const raport a, const raport b)
{
return a.val>b.val;
}
int main ()
{
int n,i,s,cmin,emin,dif,min,minc;
ifstream f("energii.in");
ofstream g("energii.out");
f>>n>>emin;
for(i=1;i<=n;i++) {
f>>e[i]>>c[i];
if(c[i]==0)
while(1);
}
f.close();
for(i=1;i<=n;i++) {
if(c[i]==0)
v[i].val=e[i];
else v[i].val=float(e[i])/float(c[i]);
v[i].poz=i;
}
sort(v+1,v+n+1,cmp);
s=0;
cmin=0;
for(i=1;i<=n;i++) {
cmin=cmin+c[v[i].poz];
s=s+e[v[i].poz];
d[v[i].poz]=1;
if(s>=emin)
break;
}
if(i==(n+1))
g<<"-1";
else {
min=cmin;
cmin=cmin-c[v[i].poz];
s=s-e[v[i].poz];
d[v[i].poz]=0;
dif=emin-s;
minc=10001;
for(i=1;i<=n;i++)
if((e[i]>=dif)&&(c[i]<minc)&&(d[i]==0))
minc=c[i];
cmin=cmin+minc;
if(min<cmin)
cmin=min;
g<<cmin;
}
g.close();
return 0;
}