Pagini recente » Cod sursa (job #2445191) | Cod sursa (job #1900065) | Cod sursa (job #2764785) | Cod sursa (job #334435) | Cod sursa (job #1550416)
#include <fstream>
#include <algorithm>
#include <utility>
#define lint long long int
using namespace std;
const int NMAX = 100005;
int n, m;
struct camion {
int c, t;
lint val;
} v[NMAX];
bool operator<(const camion &a, const camion &b) {
return a.val > b.val;
}
int print_ans(int time) {
for (int i = 1; i <= n; ++ i)
v[i].val = v[i].c * (time / (2 * v[i].t));
sort(v + 1, v + n + 1);
lint _m = m;
for (int i = 1; i <= n; ++ i)
_m -= v[i].val;
return _m <= 0;
}
bool ok_ans(int time) {
for (int i = 1; i <= n; ++ i)
v[i].val = v[i].c * (time / (2 * v[i].t));
sort(v + 1, v + n + 1);
int _m = m;
for (int i = 1; i <= n; ++ i) {
_m -= v[i].val;
if (_m <= 0)
return i;
}
return n + 1;
}
ifstream cin("garaj.in");
ofstream cout("garaj.out");
void read() {
cin >> n >> m;
for (int i = 1; i <= n; ++ i)
cin >> v[i].c >> v[i].t;
}
void solve() {
int st = 1;
int dr = 1000000000;
int mijl;
int ans = dr + 1;
while (st <= dr) {
mijl = (st + dr) / 2;
if (ok_ans(mijl)) {
ans = mijl;
dr = mijl - 1;
}
else
st = mijl + 1;
}
cout << ans << ' ' << print_ans(ans) << '\n';
}
int main()
{
read();
solve();
cin.close();
cout.close();
return 0;
}