Cod sursa(job #2889096)

Utilizator SeracovanuEdwardSeracovanu Edward SeracovanuEdward Data 12 aprilie 2022 11:27:28
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb

#include <bits/stdc++.h>

using namespace std;

int N , K;
int A[16005];

int main()
{
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    cin >> N >> K;
    for(int i = 1;i <= N; ++i)
        cin >> A[i];
    int st = 1 ,dr = 1e9;
    int rez = 0;
    auto good = [&](int x) ->bool{
        int curr = 1;
        int sum = 0;
        for(int i = 1;i <= N; ++i){
            if(A[i] > x)
                return 0;
            if(sum + A[i] <= x)
                sum += A[i];
            else{
                sum = A[i];
                curr++;
            }
        }
        return curr <= K;
    };
    while (st <= dr){
        int mid = (st + dr) / 2;
        if(!good(mid))
            st = mid + 1;
        else {
            rez = mid;
            dr = mid - 1;
            }
    }
    cout << rez;
}