Cod sursa(job #2076335)

Utilizator dariusdariusMarian Darius dariusdarius Data 26 noiembrie 2017 14:09:33
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <algorithm>
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;

const int MAX_N = 16005;

int a[MAX_N];

int tr(int s, int n) {
    int num = 0, current_sum = a[1];
    for (int i = 2; i <= n; ++ i) {
        if (current_sum + a[i] > s) {
            current_sum = a[i];
            num += 1;
        } else {
            current_sum += a[i];
        }
    }
    return num + 1;
}

int main() {
    ifstream cin("transport.in");
    ofstream cout("transport.out");
    int n, k;
    cin >> n >> k;
    int left = 0, right = 0, best = 1 << 30;
    for (int i = 1; i <= n; ++ i) {
        cin >> a[i];
        left = max(left, a[i]);
        right = right + a[i];
    }
    while (left <= right) {
        int middle = (left + right) / 2;
        if (tr(middle, n) <= k) {
            best = middle;
            right = middle - 1;
        } else {
            left = middle + 1;
        }
    }
    cout << best << "\n";
    return 0;
}