Cod sursa(job #2775435)

Utilizator MR0L3eXMaracine Constantin Razvan MR0L3eX Data 15 septembrie 2021 19:48:19
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <bits/stdc++.h>

using namespace std;

const int mxN = 16000;

int salt[mxN];

int main() {
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);

    int n, k;
    cin >> n >> k;
    int L=0, R=0;
    for(int i=0; i<n; ++i) {
        cin >> salt[i];
        L=max(L, salt[i]);
        R+=salt[i];
    }
    --L, ++R;
    while(L+1<R) {
        int M=(L+R)/2, drumuri=0, sum=0;
        for(int i=0; i<n; ++i) {
            if(sum+salt[i]>M) {
                ++drumuri;
                --i;
                sum=0;
            }
            else sum+=salt[i];
        }
        if(sum!=0) ++drumuri;
        if(drumuri>k) L=M;
        else R=M;
    }
    cout << R << "\n";
    return 0;
}