Cod sursa(job #2333086)

Utilizator Radu684Radu Georgescu Radu684 Data 31 ianuarie 2019 18:05:12
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>

using namespace std;

ifstream in("transport.in");
ofstream out("transport.out");

const int NMAX = 16005;
int v[NMAX], k, n;

bool ok(int c) {
    int tr = 0, i, sc = 0;
    for(i = 1; i <= n; i++) {
        if(v[i] > c) 
            return 0;
        if(sc + v[i] <= c)
            sc = sc + v[i];
        else {
            tr++;
            sc = v[i];
        }
    }
    if(sc > 0)
       tr++;
    return tr <= k;
}

int bs(int st, int dr) {
    int med, last = -1;
    while(st <= dr) {
        med = (st + dr)/2;
        if(ok(med)) {
            last = med;
            dr = med - 1;
        } else 
            st = med + 1;
    }
    return last;
}

int main() {
    int i, s = 0, ans;
    in >> n >> k;
    for(i = 1; i <= n; i++) {
        in >> v[i];
        s += v[i];    
    }
    ans = bs(1, s);
    out << ans << '\n';
    return 0;
}