Pagini recente » Rating Constantin Tiberiu Zota (constantin_tiberiu) | Cod sursa (job #490614) | Monitorul de evaluare | Cod sursa (job #1081440) | Cod sursa (job #1112846)
#include <cstdio>
#include <algorithm>
using namespace std;
FILE*f=fopen("garaj.in", "r");
FILE*g=fopen("garaj.out", "w");
long long n, m, i, s, d, p, u, mi, a[100010], t;
struct camion{
long long s, t;
} v[100010];
bool verif(long long t){
s=0;
for(i=1; i<=n; i++)
{
s+=(t/(v[i].t<<1))*v[i].s;
if(s>=m)
return 1;
}
return 0;
}
bool cmp(camion x, camion y){
return ( (x.s/x.t)>(y.s/y.t) );
}
int main(){
fscanf(f, "%lld %lld", &n, &m);
for(i=1; i<=n; i++)
fscanf(f, "%lld %lld", &v[i].s, &v[i].t);
p=1;
u=2LL*m;
while(p<=u)
{
mi=(p+u)/2;
if( verif(mi) )
u=mi-1;
else
p=mi+1;
}
t=p;
for(i=1; i<=n; i++)
a[i]=(t/(v[i].t<<1))*v[i].s;
sort(a+1, a+n+1);
s=0;
for(i=n; i>0; i--)
{
s+=a[i];
if(s>=m)
break;
}
fprintf(g, "%lld %lld\n", p, i);
return 0;
}