Cod sursa(job #2980463)

Utilizator SSKMFSS KMF SSKMF Data 16 februarie 2023 15:49:45
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
using namespace std;

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

int lungime , sir[16000];

int main ()
{
    int limita;
    cin >> lungime >> limita >> sir[0];

    int maxim = sir[0];
    for (int indice = 1 ; indice < lungime ; indice++)
        {
            cin >> sir[indice]; 

            if (sir[indice] > maxim) 
                maxim = sir[indice];
        }

    int stanga = 1 , dreapta = 256000000 , capacitate = 256000000;
    while (stanga <= dreapta)
    {
        int mijloc = (stanga + dreapta) / 2;

        if (mijloc >= maxim)
        {
            int actual = 0 , transporturi = 1;
            for (int indice = 0 ; indice < lungime && transporturi <= limita ; indice++)
                if (actual + sir[indice] <= mijloc)
                    actual += sir[indice];
                else
                    actual = sir[indice] , transporturi++;

            if (transporturi > limita)
                stanga = mijloc + 1;
            else
                dreapta = mijloc - 1 , capacitate = mijloc;
        }
        else
            stanga = mijloc + 1;
    }

    cout << capacitate;
    cout.close(); cin.close();
    return 0;
}