Cod sursa(job #1991469)

Utilizator victoreVictor Popa victore Data 16 iunie 2017 21:54:00
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<cstdio>

const int nmax=16005;

int k,st,dr,n;
int v[nmax];
inline int max(int a,int b)
{
    if(a>b)
        return a;
    return b;
}

inline int nr(int x)
{
    int i,s=0,cnt=1;
    for(i=1;i<=n;++i)
    {
        s+=v[i];
        if(s>x)
        {
            s=v[i];
            cnt++;
        }
    }
    return cnt;
}
inline int bsearch(int x)
{
    int i,step;
    for(step=1;step<=dr;step<<=1);
    for(i=dr;step;step>>=1)
        if(i-step>=st&&nr(i-step)<=x)
            i-=step;
    return i;
}

int main()
{
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    int i,j;
    scanf("%d%d",&n,&k);
    scanf("%d",&v[1]);
    st=dr=v[1];
    for(i=2;i<=n;++i)
    {
        scanf("%d",&v[i]);
        st=max(st,v[i]);
        dr+=v[i];
    }
    printf("%d",bsearch(k));
}