Cod sursa(job #1100058)

Utilizator stefan.friptuPetru Stefan Friptu stefan.friptu Data 6 februarie 2014 16:06:15
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <cstdio>

using namespace std;

long n,k,a[16001],i;

bool ok (long P)
{
    long s=0,i,nr=1;
    for(i=1;i<=n;i++)
    {
        s+=a[i];
        if(s>P){
            nr++;
            s=a[i];
        }
    }
    if(nr>k)
        return 0;
    return 1;
}

long bs(long st,long dr)
{
    long med, last=-1;
    while(st<=dr)
    {
        med=st+((dr-st)>>1);
        if(ok(med))
        {
            last=med;
            dr=med-1;
        }
        else
            st=med+1;
    }
    return last;
}

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

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

    long s=0;

    for(i=1;i<=n;i++)
    {
        scanf("%ld",&a[i]);
        s+=a[i];
    }
    printf("%ld\n",bs(1,s));
    return 0;
}