Cod sursa(job #2123695)

Utilizator oso.andinoooIonut Stan oso.andinooo Data 6 februarie 2018 15:39:57
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <bits/stdc++.h>
using namespace std;

int s[160005], n, k;

bool check(int c) {
    int q = 1, su = 0, t = 1;
    while (q <= n) {
        if (su + s[q] <= c)
            su  = su + s[q];
        else  {
            t++;
            su = s[q]; }
        q++; }
    if (t > k)
        return 1;
    return 0; }

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

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

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

    for (int bit = 1 << 28; bit > 0; bit = bit / 2) {
        if (m > c + bit || check(c + bit))
            c = c + bit; }

    printf("%d\n", c + 1);
    return 0; }