Cod sursa(job #1803394)

Utilizator dinurosca03Rosca Dinu Cristian dinurosca03 Data 11 noiembrie 2016 13:14:35
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <cstdio>

using namespace std;
int v[16005];
int main()
{
    freopen ("transport.in","r",stdin);
    freopen ("transport.out","w",stdout);
    int n,k,i,st=1,dr=0,ans=0,med,s,nr,max1=0;
    scanf ("%d%d",&n,&k);
    for (i=1;i<=n;i++) {
        scanf ("%d",&v[i]);
        dr+=v[i];
        if (v[i]>=max1)
            max1=v[i];
    }
    st=max1;
    while (st<=dr) {
        med=(st+dr)/2;
        s=0;
        nr=1;
        for (i=1;i<=n;i++) {
            if (med>=s+v[i])
                s+=v[i];
            else {
                s=v[i];
                nr++;
            }
        }
        if (nr<=k) {
            ans=med;
            dr=med-1;
        }else st=med+1;
    }
    printf ("%d ", ans);
    return 0;
}