Cod sursa(job #1311469)

Utilizator nytr0gennytr0gen nytr0gen Data 8 ianuarie 2015 11:37:09
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>
using namespace std;
const int N_MAX = 16000;

int verif(int *v, int v_len, int c) {
    int s = 0, t = 1;
    for (int i = 0; i < v_len; i++) {
        if (v[i] > c) return -1;
        if (s + v[i] > c) {
            s = v[i];
            t++;
        } else {
            s += v[i];
        }
    }
    //printf("t: %d c: %d\n", t, c);

    return t;
}

int main() {
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);

    int N, K;
    scanf("%d%d", &N, &K);

    int v[N_MAX], total = 0;
    for (int i = 0; i < N; i++) {
        scanf("%d", &v[i]);
        total += v[i];
    }

    int pas = 1 << 28, poz = 0;
    int final;
    while (pas >>= 1) {
        if (pas + poz <= total) {
            int test = verif(v, N, pas + poz);
            if (test > K) {
                poz += pas;
            } else if(test == K) {
                final = pas + poz;
            }
        }
    }

    printf("%d", final);

    return 0;
}