Cod sursa(job #1374942)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 5 martie 2015 11:28:55
Problema Garaj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
#include <algorithm>

#define NMax 100010

using namespace std;

ifstream f("garaj.in");
ofstream g("garaj.out");

int n, m, cmin, nrc, tcam[NMax], st, dr, mid, tmin;
struct camion
{
    int c;
    int t;
}c[NMax];

bool test_time(int time)
{
    int var = m;
    for (int i = 1; i <= n; i++) {
        var -= c[i].c * (time / c[i].t);
        if (var <= 0)
            return true;
    }
    return false;
}

int main()
{
    f >> n >> m;
    for (int i = 1; i <= n; i++)  {
        int tmp;
        f >> c[i].c >> tmp;
        c[i].t = 2 * tmp;
    }
    st = 1;
    dr = 2000000000;
    while (st <= dr) {
        mid = (st + dr) / 2;
        bool test = test_time(mid);
        if (test) {
            tmin = mid;
            dr = mid - 1;
        }
        else
            st = mid + 1;
    }
    g << tmin << " ";
    for (int i = 1; i <= n; i++)
        tcam[i] = c[i].c * (tmin / c[i].t);
    sort(tcam + 1, tcam + n + 1);
    for (int i = n; i >= 1 && m > 0; i--, nrc++)
        m -= tcam[i];
    g << nrc;
}