Pagini recente » Cod sursa (job #1911656) | Cod sursa (job #1417909) | Cod sursa (job #1020421) | Cod sursa (job #934835) | Cod sursa (job #967120)
Cod sursa(job #967120)
#include<stdio.h>
int v[100001];
int n,k;
int nrtr(int capacitate){
int i=1,cnt=1,t=0;
for (i=1;i<=n;i++){
if (t+v[i]<=capacitate)
t+=v[i];
else{
t=v[i];
cnt++;
if (cnt>k)
return 1;
}
}
return 0;
}
int main(){
freopen ("transport.in","r",stdin);
freopen ("transport.out","w",stdout);
scanf ("%d%d",&n,&k);
int i,max=0,suma=0;
for (i=1;i<=n;i++){
scanf ("%d",&v[i]);
if (max<v[i])
max=v[i];
suma+=v[i];}
int stanga,dreapta,mijloc,ult,nr;
stanga=max;
dreapta=suma+1;
ult=suma;
while (stanga<=dreapta){
mijloc=(stanga+dreapta)/2;
nr=nrtr(mijloc);
if (nr==0){
dreapta=mijloc-1;
ult=mijloc;}
else{
stanga=mijloc+1;
}}
while(nrtr(ult))++ult;
while(!nrtr(ult-1))--ult;
printf ("%d\n",ult);
return 0;}