Cod sursa(job #2157517)

Utilizator CiprianC11Constantinescu Ciprian CiprianC11 Data 9 martie 2018 18:11:08
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <cstdio>

using namespace std;

int v[16005];

bool ok(int c, int n, int k)
{
    int s = 0, p = 0;
    for(int i = 0; i < n; i++)
    {
        s += v[i];
        if(v[i] > c) return 0;
        if(s == c) { s = 0; p++; }
        if(s > c) { i--; s = 0; p++; }
    }
    return p + (s >= 0) <= k;
}

int main()
{
    int n, k, st = 0, dr = 0, med;
    scanf("%d%d", &n, &k);
    for(int i = 0; i < n; i++)
    {
        scanf("%d", &v[i]);
        dr += v[i];
    }
    while(st <= dr)
    {
        med  = (st + dr) / 2;
        if(ok(med, n, k)) dr = med - 1;
        else st = med + 1;
    }
    printf("%d", (st + dr) / 2 + 1);
    return 0;
}