Cod sursa(job #2079933)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 2 decembrie 2017 00:16:20
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <bits/stdc++.h>
using namespace std;

void solve() {
    size_t weight_count, max_transports;
    cin >> weight_count >> max_transports;

    int64_t sum = 0;
    vector< int > weights(weight_count);
    for (auto& it : weights) {
        cin >> it;
        sum += it;
    }

    auto verify = [&](int64_t capacity) -> bool {
        int64_t current_sum = 0;
        int transports = 1;
        for (auto&& it : weights) {
            if (it > capacity)
                return false;

            if (current_sum + it > capacity)
                transports++, current_sum = it;
            else
                current_sum += it;

            if (transports > max_transports)
                return false;
        }

        return true;
    };

    int64_t left = 1, right = sum;
    while (left <= right) {
        int64_t middle = (left + right) / 2;
        if (verify(middle))
            right = middle - 1;
        else
            left = middle + 1;
    }

    cout << left << endl;
}

int main() {
    assert(freopen("transport.in", "r", stdin));
    assert(freopen("transport.out", "w", stdout));
    cin.tie(nullptr);
    ios_base::sync_with_stdio(false);

    solve();

    return 0;
}