Cod sursa(job #2308784)

Utilizator alexsandulescuSandulescu Alexandru alexsandulescu Data 27 decembrie 2018 18:58:44
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.7 kb

#include <fstream>

using namespace std;

ifstream f("transport.in");
ofstream g("transport.out");

long long N, K, sum, MAX, a[16001];

bool check(long long c) {
    long long nt = 0, x = c;
    for (int i = 1; i <= N; i++)
        if (a[i] <= x) x -= a[i];
        else nt++, x = c, i--;
    return (nt + 1) <= K;
}

long long lower_bound() {
    long long st = MAX, dr = sum, poz = 1;
    while(st<=dr) {
        long long mij = st +(dr - st) / 2;
        if (check(mij)) poz = mij, dr = mij - 1;
        else st = mij + 1;
    }
    return poz;
}

int main()
{
    f >> N >> K;
    for (int i = 1; i <= N; i++)
        f >> a[i], sum += a[i], MAX = max(MAX, a[i]);
    g << lower_bound() << "\n";
    return 0;
}