Pagini recente » Cod sursa (job #2438095) | Cod sursa (job #1431628) | Cod sursa (job #1960436) | Cod sursa (job #1638690) | Cod sursa (job #1392866)
#include <fstream>
#include <algorithm>
#include <cstring>
#define nmax 100005
using namespace std;
ifstream f("garaj.in");
ofstream g("garaj.out");
struct camion{int c;int t;} v[nmax];
int n,m,ns,sol,sol2;
char s[15];
inline int getnum()
{
int x=0;
while (s[ns]&&s[ns]!=' ')
x=x*10+s[ns++]-'0';
ns++;
return x;
}
int check(int k)
{
int i;
long long r=m;
for (i=1;i<=n;i++)
{r-=1LL*(k/2/v[i].t)*v[i].c;
if (r<=0)
return 1;
}
return 0;
}
bool cmp(const camion &a,const camion &b)
{
return (a.c/a.t)>(b.c/b.t);
}
int main()
{
int i,j,st,dr,mij;
f>>n>>m;f.get();
for (i=1;i<=n;i++) {
memset(s,0,sizeof(s));
ns=0;
f.getline(s,15);
v[i].c=getnum();
v[i].t=getnum();
}
st=1;
dr=1<<30;
while (st<=dr) {
mij=(st+dr)>>1;
if (check(mij)) {
sol=mij;
dr=mij-1;
}
else
st=mij+1;
}
g<<sol<<' ';
sort(v+1,v+n+1,cmp);
for (i=1;i<=n;i++) {
sol2++;
m-=(sol/2/v[i].t)*v[i].c;
if (m<=0)
break;
}
g<<sol2<<'\n';
return 0;
}