Cod sursa(job #2764848)

Utilizator DragosC1Dragos DragosC1 Data 22 iulie 2021 21:21:39
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
using namespace std;

int n, k;
long long a[16001];

void read() {
    int i;
    ifstream f("transport.in");
    f >> n >> k;
    for (i = 1; i <= n; i++)
        f >> a[i];
    f.close();
}

bool ok(long long x) {
    long long i, nr = 0, sum = 0;
    for (i = 1; i <= n; i++) {
        if (sum + a[i] <= x) 
            sum += a[i];
        else if (a[i] <= x) {
            nr++;
            sum = a[i];
        }
        else return 0;
    }
    nr++;
    if (nr <= k)
        return 1;
    return 0;
}

long long rez;

void solve() {
    long long st = 1, dr = 1e18, mij;
    while (st <= dr) {
        mij = (st + dr) / 2;
        if (ok(mij))
            dr = mij - 1;
        else st = mij + 1;
    }
    rez = st;
}

void output() {
    ofstream g("transport.out");
    g << rez;
    g.close();
}

int main() {
    read();
    solve();
    output();
    return 0;
}