Pagini recente » Cod sursa (job #2893074) | Cod sursa (job #1787897) | Cod sursa (job #2030121) | Cod sursa (job #907131) | Cod sursa (job #1608354)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("garaj.in");
ofstream out("garaj.out");
const int N = 100100;
const double ERR = 1e-6;
const int INF = 0x7ffffffe;
struct Truck {
int t;
int c;
bool operator <(const Truck &other) const {
return (double)c / (double)t - (double)other.c / (double)other.t > ERR;
}
};
int n, m;
Truck tr[N];
int count_trucks(int time) {
int i;
long long sum;
sum = 0;
for(i = 1; i <= n; i++) {
sum += 1LL * (time / (2 * tr[i].t)) * tr[i].c;
if(sum >= m) {
return i;
}
}
return -1;
}
int main() {
int i, lo, hi, med, cnt, best_time, best_cnt;
in >> n >> m;
for(i = 1; i <= n; i++) {
in >> tr[i].c >> tr[i].t;
}
sort(tr + 1, tr + n + 1);
lo = 1;
hi = INF;
while(lo <= hi) {
med = (lo + hi) >> 1;
cnt = count_trucks(med);
if(cnt == -1) {
lo = med + 1;
}
else {
hi = med - 1;
best_time = med;
best_cnt = cnt;
}
}
out << best_time << ' ' << best_cnt << '\n';
}