Cod sursa(job #1663427)

Utilizator berindeiChesa Matei berindei Data 25 martie 2016 23:21:17
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
using namespace std;
int main(){
    freopen ("transport.in", "r", stdin);
    freopen ("transport.out", "w", stdout);
    long long n, k, l1, l2, i, kv, m, s, c;
    long long v[16001];
    scanf ("%lld %lld", &n, &k);
    l1=l2=0;
    for (i=1; i<=n; i++){
        scanf ("%lld", &v[i]);
        l2+=v[i];
        if (v[i]>l1)
            l1=v[i];
    }
    while (l1<=l2){
        m=(l1+l2)/2;
        for (i=1, kv=0; i<n; kv++){
            s=0;
            while (s<=m && i!=n+1){
                s+=v[i];
                i++;
            }
            i--;
        }
        if (s>m && i==n)
            kv++;
        if (kv==k){
            c=m;
            l2=m-1;
        }
        else if (kv>k)
            l1=m+1;
        else
            l2=m-1;
    }
    printf ("%lld", c);
}