Cod sursa(job #2173470)

Utilizator 24601Dan Ban 24601 Data 15 martie 2018 22:24:10
Problema Transport Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <stdio.h>

#define SIZE 16000
#define NMAX 256000000

static unsigned short v[SIZE];

int main(void)
{
    int n, k, i, uk, s, mid, pos, cap;

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

    scanf("%d %d", &n, &k);

    for (i = 0; i < n; i += scanf("%hu", &v[i]))
        ;

    for (mid = 1 << 28, pos = NMAX; mid; mid >>= 1) {
        if (mid <= pos) {
            for (cap = pos - mid, uk = k, s = 0; s < n; s++) {
                if (cap - v[s] >= 0) {
                    cap -= v[s];
                } else if (uk > 0 && pos - mid >= v[s]) {
                    cap = pos - mid - v[s];
                    uk--;
                } else {
                    break;
                }
            }

            if (s == n) {
                pos -= mid;
            }
        }
    }

    printf("%d", pos);

    return 0;
}