Cod sursa(job #3311308)

Utilizator 17.emi._Tabara Emilian 17.emi._ Data 21 septembrie 2025 10:27:44
Problema Transport Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <iostream>
using namespace std;

const int MAXN = 16000;
int v[MAXN];
int N, K;

bool can(int C) {
    int transports = 1;
    int current = 0;
    for(int i = 0; i < N; i++){
        if(current + v[i] <= C){
            current += v[i];
        } else {
            transports++;
            current = v[i];
            if(transports > K) return false;
        }
    }
    return true;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> N >> K;
    int maxi = 0;
    long long sum = 0;
    for(int i = 0; i < N; i++){
        cin >> v[i];
        if(v[i] > maxi) maxi = v[i];
        sum += v[i];
    }

    int lo = maxi, hi = (int)sum;
    int best = hi;

    while(lo <= hi){
        int mid = lo + (hi - lo)/2;
        if(can(mid)){
            best = mid;
            hi = mid - 1;
        } else {
            lo = mid + 1;
        }
    }

    cout << best << "\n";
    return 0;
}