Cod sursa(job #3341548)

Utilizator filipdanieloanFilip-Daniel Oancea filipdanieloan Data 19 februarie 2026 21:46:27
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 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;
    for(int i = 1; i <= n; ++i)
        cin >> v[i];

    int st = 1, dr = INT_MAX, rez = 0;
    while(st <= dr) {
        int mid = (st + dr) >> 1;
        if(check(mid)) {
            rez = mid;
            dr = mid - 1;
        } else
            st = mid + 1;
    }

    cout << rez;

    return 0;
}