Cod sursa(job #178493)
Utilizator | Data | 14 aprilie 2008 17:58:27 | |
---|---|---|---|
Problema | Transport | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.66 kb |
#include <stdio.h>
long n,i,a[16005],st,dr,mid,k,t;
long nrtrans(long x){
long r=0,t=1;
for (i=1;i<=n;i++)
if (a[i]+r<=x)r+=a[i];
else {t++;r=a[i];}
return t;
}
int main(){
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
st=1;
scanf("%ld %ld",&n,&k);
for (i=1;i<=n;++i){
scanf("%ld",&a[i]);
if (a[i]>st)st=a[i];
dr+=a[i];
}
while (st<dr){
mid=(st+dr)/2;
t=nrtrans(mid);
if (t<=k)
dr=mid;
else st=mid+1;
}
printf("%ld\n",st);
return 0;
}