Cod sursa(job #1399093)

Utilizator Stefex09Stefan Teodorescu Stefex09 Data 24 martie 2015 16:07:16
Problema Garaj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 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];

int Val[MAXN];

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

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

        if (ret >= M)
            return 1;
    }

    return 0;
}

int bsearch ()
{
    int MAX = 200000000;
    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;

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 ();

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

    sort (Val + 1, Val + N + 1);

    int Sum = 0;
    int Ans = 0;
    for (i = N; i; i --){
        Sum += Val[i];
        Ans ++;

        if (Sum >= M)
            break;
    }

    out << T << " " << Ans;

    return 0;
}