Cod sursa(job #2075827)

Utilizator luis.micuMicu Florian-Luis luis.micu Data 25 noiembrie 2017 18:31:08
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int v[16000];

int suficient(int mij, int n, int k) {
    int s = 0, drum = 1;
    for (int i = 0; i < n; i++) {
        if (s + v[i] <= mij)
            s = s + v[i];
        else {
            drum++;
            s = v[i];
        }
    }
    if (drum <= k)
        return 1;
    else return 0;
}

int main() {
    int MAX = -16000, MIN = 0, n, k, mi, lo, hi, val = 0;
    in >> n >> k;
    for (int i = 0; i < n; i++) {
        in >> v[i];
        MIN = MIN + v[i];
        if (v[i] > MAX)
            MAX = v[i];
    }

    lo = MAX;
    hi = MIN;
    while (lo <= hi) {
        mi = (lo + hi) / 2;
        if (suficient(mi, n, k) == 1) {
            val = mi;
            hi = mi - 1;
        }
        else lo = mi + 1;
    }
    out << val;
    return 0;
}