Cod sursa(job #1558604)

Utilizator nytr0gennytr0gen nytr0gen Data 29 decembrie 2015 13:45:26
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
/*
http://www.infoarena.ro/problema/transport
*/

#include <cstdio>
#include <algorithm>
using namespace std;
const int N_MAX = 16000;

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

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

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

    int step = 1 << 30;
    int pos  = 0;
    while (step >>= 1) {
        int cap = pos + step;
        int trucks = 0;

        for (int i = 0; i < N; i++) {
            if (cap < v[i]) {
                trucks = K + 1;
                break;
            }
        }

        for (int i = 0, sum = 0; i < N; i++) {
            if (sum + v[i] > cap) {
                sum = v[i];
                trucks++;
            } else {
                sum += v[i];
            }
        }

        if (trucks >= K) {
            pos += step;
        }
    }

    printf("%d\n", pos + 1);

    return 0;
}