Cod sursa(job #1575643)

Utilizator mariusn01Marius Nicoli mariusn01 Data 21 ianuarie 2016 18:10:49
Problema Garaj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>
#include <algorithm>
#define INF 2000000000000LL
#define lint long long
using namespace std;

lint n, m, timp, timpst, timpdr, i, T[100010], C[100010];

lint numar(lint timp) {
    // se da timp si sa aflu numarul maxim de sticle de transportat in timp
    lint nr = 0;
    for (i=1;i<=n;i++) {
        nr = nr + timp/T[i]*C[i];
    }
    return nr;
}

int main () {
    ifstream fin ("garaj.in");
    ofstream fout("garaj.out");
    fin>>n>>m;

    for (i=1;i<=n;i++) {
        fin>>C[i]>>T[i];
        T[i] *= 2;
    }

    timpst = 1;
    timpdr = INF;

    while (timpst <= timpdr) {
        timp = (timpst + timpdr)/2;
        if (numar(timp) < m)
            timpst = timp + 1;
        else
            timpdr = timp - 1;
    }

    fout<<timpst<<" ";
    // cu acest timp minim gasit sa alegem un numar minim de camioane
    for (i=1;i<=n;i++)
        T[i] = timpst/T[i]*C[i];

    sort(T+1, T+n+1);
    i = n;
    while (m>=0) {
        m -= T[i];
        if (m <= 0)
            break;
        i--;
    }
    fout<<n-i+1;

    return 0;
}