Cod sursa(job #1443867)

Utilizator GeiGeiGeorge Cioroiu GeiGei Data 28 mai 2015 19:46:09
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
//0115
#include <cstdio>

int main() {
    FILE* fi = fopen("transport.in", "rt");
    FILE* fo = fopen("transport.out", "wt");

    long n, k, v[16010];

    fscanf(fi, "%ld%ld", &n, &k);
    long st, dr;

    for (int i = 0; i < n; i++) {
        fscanf(fi,  "%ld", &v[i]);
        dr +=v[i];
        if (v[i] > st) {
            st = v[i];
        }
    }

    while (st + 1 < dr) {
        long mij = (st + dr) / 2;
        long vm = 0;
        long aux = mij;
        for (int i = 0 ; i < n; i++) {
            if (v[i] > aux) {
                aux = mij;
                vm++;
            }
            aux -= v[i];
        }
        if (vm > k) {
            st = mij;
        } else {
            dr = mij;
        }
    }

    fprintf(fo, "%ld", st + 1);

    return 0;
}