Pagini recente » Cod sursa (job #169606) | Cod sursa (job #2138188) | Cod sursa (job #1693954) | Cod sursa (job #2700703) | Cod sursa (job #307181)
Cod sursa(job #307181)
#include <stdio.h>
#include <algorithm>
#define maxn 100100
using namespace std;
struct camion {
int c, t;
};
int n, i, j, m, rez, nr;
camion v[maxn];
int x[maxn];
int posibil(int t) {
int i, nr;
long long sum = 0;
for (i = 1; i <= n; i++) {
nr = (t / (2 * v[i].t)) * v[i].c;
sum += nr;
if (sum >= m)
break;
}
if (sum >= m)
return 1;
return -1;
}
void bsearch(int l, int r) {
int m, t;
while (l <= r) {
m = (l + r) >> 1;
t = posibil(m);
if (t != -1) {
if (m < rez)
rez = m;
r = m - 1;
}
else
l = m + 1;
}
}
int main() {
freopen("garaj.in", "r", stdin);
freopen("garaj.out", "w", stdout);
scanf("%d%d", &n, &m);
for (i = 1; i <= n; i++)
scanf("%d%d", &v[i].c, &v[i].t);
rez = 2000000000; nr = 2000000000;
bsearch(1, 1000000000);
for (i = 1; i <= n; i++)
x[i] = (rez / (2 * v[i].t)) * v[i].c;
sort(x + 1, x + n + 1);
long long sum = 0;
for (i = n; i > 0; i--) {
sum += x[i];
if (sum >= m) {
nr = n - i + 1;
break;
}
}
printf("%d %d\n", rez, nr);
return 0;
}