Cod sursa(job #2278916)

Utilizator mariusn01Marius Nicoli mariusn01 Data 8 noiembrie 2018 18:16:53
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>

using namespace std;

int v[16001]; /// capacitatile saltelelor
int n, maxim, suma, i, k, tr, cap, ramas, st, dr;

ifstream fin ("transport.in");
ofstream fout("transport.out");

int main () {
    fin>>n>>k;
    for (i=1;i<=n;i++) {
        fin>>v[i];
        suma += v[i];
        if (v[i] > maxim)
            maxim = v[i];
    }
    st = maxim;
    dr = suma; /// st si dr sunt capacitati posibile de camion

    while (st <= dr) {
        cap = (st + dr) / 2;

        /// numar cate transporturi fac sa duc totul cu un camion de capacitate cap
        tr = 1; /// ramas = cat mai pot incarca in trasportul curent
        ramas = cap - v[1]; /// am incarcat prima saltea
        for (i=2;i<=n;i++)
            if (v[i] <= ramas)
                ramas -= v[i];
            else {
                tr++;
                ramas = cap-v[i];
            }

        if (tr <= k)
            dr = cap - 1;
        else
            st = cap + 1;
    }

    fout<<st;
    return 0;
}