Cod sursa(job #2655835)

Utilizator ASebastianA Sebastian ASebastian Data 5 octombrie 2020 18:12:28
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
//#include <iostream>
#include <fstream>
using namespace std;
ifstream cin ("transport.in");
ofstream cout ("transport.out");
int v[16001], n, k;
bool ok (int c)
{
    int tr, s, i;
    s=0, tr=0;
    for (i=1; i<=n; i++) {
        if (v[i] > c)
            return 0;
        if (s + v[i] <= c) {
            s += v[i];
        }
        else {
            tr ++;
            s = v[i];
        }
    }
    if (s > 0)
        tr++;
    return tr <= k;
}

int bs (int s, int d)
{
    int mid, last = -1;
    while (s <= d) {
        mid = (s + d) / 2;
        if (ok(mid)) {
            last = mid;
            d = mid - 1;
        }
        else
            s = mid + 1;
    }
    return last;
}
int main()
{
    /// 7 3 2 3 1 4. Pot sa iau un camion mare de 7 + 3 + 2 + 3 + 1 + 4 = 20, cel mai mare camion
    /// Deci, domeniul meu va fi de la 1 la 20 ([1, 20])

    int s=0;
    cin >> n >> k;
    for (int i=1; i<=n; i++) {
        cin >> v[i];
        s+=v[i];
    }
    cout << bs (0,s);
    return 0;
}