Pagini recente » Cod sursa (job #475996) | Cod sursa (job #2522154) | Cod sursa (job #905970) | Cod sursa (job #786155) | Cod sursa (job #3138219)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("garaj.in");
ofstream out("garaj.out");
long long n, m;
long long tmin;
struct camion
{
long long c, t;
}v[100002];
long long SticleDuse(long long t)//cate sticle se transporta intr-un timp t
{
long long r=0;
for(int i=1; i<=n; i++)
{
if(v[i].t == 0)
{
exit(0);
}
r+=(t/v[i].t)*v[i].c;
if(r>=m)
break;
}
return r;
}
bool cmp(camion a, camion b)
{
if(a.t == 0 || b.t == 0)
{
exit(0);
}
if((tmin/a.t)*a.c<(tmin/b.t)*b.c)
{
return 0;
}
return 1;
}
int main()
{
in>>n>>m;
for(int i=1; i<=n; i++)
{
in>>v[i].c>>v[i].t;
v[i].t *= 2;
}
long long st=0, dr=v[1].t*m, mijl, s;
while(st<dr)
{
mijl=(st+dr)/2;
s=SticleDuse(mijl);
if(s<m)
{
st=mijl+1;
}
else
{
dr=mijl;
}
}
tmin=st;
out<<tmin<<" ";
sort(v+1, v+n+1, cmp);
int nrmin=0;
for(int i=1; i<=n; i++)
{
if(v[i].t == 0)
{
exit(0);
}
m-=(tmin/v[i].t)*v[i].c;
nrmin++;
if(m<=0)
break;
}
out<<nrmin;
}