Cod sursa(job #2238633)

Utilizator dragos192k1Dragos-Iulian Galeteanu dragos192k1 Data 6 septembrie 2018 18:43:38
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>
#define max(a, b) a >= b ? a : b

using namespace std;

int n, k, step, sol, low, high, mid, v[16005];

bool test(int c)
{
    int t = 0;
    int s = 0;

    for (int i = 1; i <= n && t <= k; ++i) {
        if (s + v[i] <= c) s += v[i];
        else {
            ++t;
            s = v[i];
        }
    }

    if (t) ++t;

    if (t <= k) return 1;
    return 0;
}

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

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

    for (int i = 1; i <= n; ++i) {
        scanf("%d", &v[i]);
        high += v[i];
        low = max(low, v[i]);
    }

    fclose(in);

    while (low <= high) {
        mid = low + (high - low) / 2;
        if (test(mid)) {
            sol = mid;
            high = mid - 1;
        }
        else low = mid + 1;
    }

    printf("%d", sol);

    fclose(out);
    return 0;
}