Cod sursa(job #897569)

Utilizator valiro21Valentin Rosca valiro21 Data 27 februarie 2013 21:15:50
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <cstdio>
#define NMax 16002

using namespace std;

long o,k,n,v[NMax],x,s,maxel;

bool verif(long c) {
    long sum=0,i;
    o=1;
    for(i=1;i<=n&&o<=k;i++) {
        if(sum+v[i]<=c)
            sum+=v[i];
        else
            sum=v[i],o++;
    }
    if(i==n+1)
        return 1;
    return 0;
}

int bsearch(long in,long fn) {
    long mid;
    while(in<=fn) {
        mid=(fn-in)/2+in;
        if(in==fn)
            return in;
        else
            if(verif(mid))
                fn=mid;
            else
                in=mid+1;
    }
    return 0;
}

int main() {
    freopen("transport.in","rt",stdin);
    freopen("transport.out","wt",stdout);
    scanf("%ld %ld",&n,&k);
    for(long i=1;i<=n;i++) {
        scanf("%ld",&x);
        s+=x;
        v[i]=x;
        if(x>maxel)
            maxel=x;
    }

    printf("%ld",bsearch(maxel,s+1));

    return 0;
}