Cod sursa(job #731290)

Utilizator mihaitza22Mihai Nan mihaitza22 Data 7 aprilie 2012 21:06:17
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <stdio.h>

#define nmax 16001
using namespace std;

long long max, s, a[nmax], i, k, n;

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

long long caut(long long st,long long dr)
{
    long long mij=(st+dr)/2;
    if(st==dr)
        return st;
    if(ver(mij))
        return caut(st,mij);
    else
        return caut(mij+1,dr);
}

int main()
{
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    scanf("%lld %lld", &n, &k);
    for(i=1;i<=n;i++)
    {
        scanf("%lld",&a[i]);
        if(a[i]>max)
            max=a[i];
        s=s+a[i];
    }
    if(k==1)
        printf("%lld",s);
    else
        if(k>=n)
            printf("%lld",max);
        else
            printf("%lld",caut(max,s));
}