Cod sursa(job #1608354)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 22 februarie 2016 00:13:15
Problema Garaj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#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';
}