Cod sursa(job #1399086)

Utilizator Stefex09Stefan Teodorescu Stefex09 Data 24 martie 2015 16:04:00
Problema Garaj Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

const int MAXN = 100000 + 10;

int N, M;
struct truck
{
    int Cap;
    int T;
} V[MAXN];

bool ok (int time)
{
    int ret = 0;
    int i;

    for (i = 1; i <= N; i ++)
        ret += (time / V[i].T) * V[i].Cap;

    return (ret >= M);
}

int bsearch ()
{
    int MAX = 10000000;
    int step;
    int ret = MAX;

    for (step = 1; step < MAX; step *= 2);
    for ( ; step; step /= 2){
        if (ret - step >= 1 && ok (ret - step))
            ret -= step;
    }

    return ret;
}

int T;

struct comp
{
    inline bool operator () (const truck &A, const truck &B) const
    {
        return A.Cap * (T / A.T)  > B.Cap * (T / B.T);
    }
};

int main()
{
    int i;

    in >> N >> M;
    for (i = 1; i <= N; i ++){
        in >> V[i].Cap >> V[i].T;
        V[i].T *= 2;
    }

    T = bsearch ();
    out << T << " ";

    sort (V + 1, V + N + 1, comp ());

    int Sum = 0;
    int Ans = 0;
    for (i = 1; i <= N; i ++){
        Sum += V[i].Cap * (T / V[i].T);
        Ans ++;

        if (Sum >= M)
            break;
    }

    out << Ans;

    return 0;
}