Cod sursa(job #3341554)

Utilizator filipdanieloanFilip-Daniel Oancea filipdanieloan Data 19 februarie 2026 21:56:16
Problema Transport Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <bits/stdc++.h>
using namespace std;

#define int long long

int n, k, v[16005];

bool check(int x) {
    int nrTransport = 0, sum = 0;
    for(int i = 1; i <= n; ++i) {
        if(v[i] > x)
            return false;
        if(sum + v[i] > x) {
            ++nrTransport;
            sum = 0;
        }
        sum += v[i];
    }
    if(sum)
        ++nrTransport;
    if(nrTransport > k)
        return false;
    return true;
}

signed main() {
    cin.tie(nullptr)->sync_with_stdio(false);
#ifndef LOCAL
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);
#endif

    cin >> n >> k;
    int summ = 0;
    for(int i = 1; i <= n; ++i) {
        cin >> v[i];
        summ += v[i];
    }

    int rez = 0;
    for(int pas = 1 << 15; pas; pas >>= 1) {
        if(rez + pas <= summ && !check(rez + pas)) {
            rez += pas;
        }
    }

    cout << rez + 1;

    return 0;
}