Cod sursa(job #3163554)

Utilizator SSKMFSS KMF SSKMF Data 31 octombrie 2023 17:02:04
Problema Garaj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>
#include <algorithm>
using namespace std;

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

int main ()
{
    int lungime , total;
    cin >> lungime >> total;

    int capacitate[100001] , durata[100001];
    for (int indice = 1 ; indice <= lungime ; indice++)
        { cin >> capacitate[indice] >> durata[indice]; durata[indice] <<= 1; }

    int stanga = 1 , dreapta = 2e9 , durata_transport = 0;
    while (stanga <= dreapta)
    {
        long long cantitate_transportata = 0;
        const int limita = (stanga + dreapta) >> 1;
        for (int indice = 1 ; indice <= lungime && cantitate_transportata < total ; indice++)
            { cantitate_transportata += limita / durata[indice] * capacitate[indice]; }

        if (total <= cantitate_transportata)
            { dreapta = limita - 1; durata_transport = limita; }
        else
            { stanga = limita + 1; }
    }

    int optiuni[100001];
    for (int indice = 1 ; indice <= lungime ; indice++)
        { optiuni[indice] = durata_transport / durata[indice] * capacitate[indice]; }

    sort(optiuni + 1 , optiuni + lungime + 1 , greater <int>());

    int indice = 0;
    do { total -= optiuni[++indice]; }
        while (total > 0);

    cout << durata_transport << ' ' << indice;
    cout.close(); cin.close();
    return 0;
}