Pagini recente » Cod sursa (job #1076105) | Cod sursa (job #1928159) | Cod sursa (job #2740126) | Cod sursa (job #1098704) | Cod sursa (job #1490410)
#include <cstdio>
#include <cstring>
#include <algorithm>
#define ll int
#define maxN 100002
using namespace std;
int n, sol, x;
ll m;
struct elem
{
ll c;
ll t;
}v[maxN];
int cmp(const elem a, const elem b)
{
return a.c * ((x * 1LL) / a.t) > b.c * ((x * 1LL) / b.t);
}
void read()
{
int i;
freopen("garaj.in", "r", stdin);
scanf("%d %lld", &n, &m);
for (i = 1; i <= n; ++ i)
scanf("%lld %lld", &v[i].c, &v[i].t),
v[i].t *= 2;
}
int ok(ll x)
{
int i;
ll sum = 0LL;
for (i = 1; i <= n; ++ i)
{
sum += v[i].c * ((x * 1LL) / v[i].t);
if (sum >= m)
break;
}
return sum >= m;
}
int bs()
{
ll p = 1 << 30, i = p;
while (p)
{
if (i - p >= 0 && ok(i - p))
i -= p;
p /= 2;
}
return i;
}
void write()
{
int sum = 0, i;
freopen("garaj.out", "w", stdout);
printf("%d", x = bs());
sort(v + 1, v + n + 1, cmp);
for (i = 1; i <= n; ++ i)
{
sum += v[i].c * ((x * 1LL) / v[i].t);
++ sol;
if (sum >= m)
break;
}
printf(" %d", sol);
}
int main()
{
read();
write();
return 0;
}