Cod sursa(job #1539352)

Utilizator enedumitruene dumitru enedumitru Data 30 noiembrie 2015 18:28:23
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.59 kb
#include <cstdio>
using namespace std;
int n,k,low,up,x[16001];
int main()
{   freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;++i)
    {   scanf("%d",&x[i]);
        up+= x[i];
        if(x[i]>low) low=x[i];
    }
    int st=low,dr=up,res;
    while(st<=dr)
    {   int med=(st+dr)/2,camioane=1,sum=0;
        for(int i=1;i<=n;++i)
            if(sum+x[i]<=med) sum+=x[i]; else {++camioane; sum = x[i];}
        if(camioane<=k) {res=med; dr=med-1;} else st=med+1;
    }
    printf("%d",res);
    return 0;
}