Pagini recente » Cod sursa (job #173884) | Cod sursa (job #174939) | Cod sursa (job #1036087) | Profil calin123456789 | Cod sursa (job #388613)
Cod sursa(job #388613)
#include <algorithm>
#include <stdio.h>
#include <vector>
#define MAX 100010
#define ll long long
#define pb push_back
using namespace std;
int n;
ll m, minT;
int c[MAX], t[MAX];
vector <ll> vctPos;
inline int test(ll x)
{
ll st = m;
for (int i = 1; i <= n; i++)
st -= ((ll) (x / (2 * t[i])) * c[i]);
if (st <= 0)
return 1;
return 0;
}
inline void cautaBin(ll st, ll dr)
{
if (st > dr)
return;
ll med = (st + dr) / 2;
if (test(med))
{
minT = med;
cautaBin(st, med - 1);
}
else cautaBin(med + 1, dr);
}
int main()
{
freopen("garaj.in", "r", stdin);
freopen("garaj.out", "w", stdout);
scanf("%d %lld", &n, &m);
for (int i = 1; i <= n; i++)
scanf("%d %d", &c[i], &t[i]);
cautaBin(0, m * 2000);
for (int i = 1; i <= n; i++)
vctPos.pb(c[i] * (ll) (minT / (2 * t[i])));
sort(vctPos.begin(), vctPos.end());
reverse(vctPos.begin(), vctPos.end());
int fol = 0;
for (; fol < n && m > 0; fol++)
m -= vctPos[fol];
printf("%lld %d\n", minT, fol);
fclose(stdin);
fclose(stdout);
return 0;
}