Cod sursa(job #1520551)
| Utilizator | Data | 8 noiembrie 2015 23:59:44 | |
|---|---|---|---|
| Problema | Transport | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 1.06 kb |
#include <cstdio>
#include <cstring>
#include <algorithm>
int v[16001];
using namespace std;
int main(){
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
int n,k,s,c,d=0,t=0,z=0,min=0,max=0,i, pp=0,m=0,rasp=2000000000;
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++){
scanf("%d",&s);
t+=s;
v[i]=s;
if(s>max)
max=s;
}
min=t/k;
if(max>min){
min=max;
max=t;
}
else
max=t;
pp=0;
i=1;
while((min<=max)&&pp==0){
m=(min+max)/2;
while(i<=n){
while((m>=d+v[i])&&(i<=n)){
d+=v[i];
i++;
}
d=0;
z++;
}
if(z<=k){
max=m-1;
i=1;
z=0;
if(m<rasp)
rasp=m;
}
else{
min=m+1;
i=1;
z=0;
}
}
printf("%d",rasp);
return 0;
}
