Pagini recente » Rating Mateiu Rares-Ioan (raresmateiu) | Cod sursa (job #1749625) | Cod sursa (job #991108) | Cod sursa (job #962285) | Cod sursa (job #1279061)
#include <stdio.h>
#include <stdlib.h>
int v[16000];
int main(){
FILE*fi,*fout;
int st,dr,i,k,pp,n,m,con,s,min,max,max1;
fi=fopen("transport.in" ,"r");
fout=fopen("transport.out" ,"w");
fscanf(fi,"%d%d" ,&n,&k);
for(i=0;i<n;i++)
fscanf(fi,"%d" ,&v[i]);
st=1;
dr=256000000;
pp=0;
min=256000000;
while(dr-st>=1&&pp==0){
m=(st+dr)/2;
con=1;
s=max=0;
for(i=0;i<n;i++)
if(s+v[i]<=m)
s=s+v[i];
else{
con++;
if(s>max)
max=s;
s=v[i];
}
// printf("%d %d %d %d\n" ,m,con,st,dr);
if(con<=k){
if(min>m)
min=m;
dr=m-1;
}
else
st=m+1;
}
m=(st+dr)/2;
con=1;
s=max1=0;
for(i=0;i<n;i++)
if(s+v[i]<=m)
s=s+v[i];
else{
con++;
if(s>max1)
max1=s;
s=v[i];
}
if(min>max)
min=max;
if(min>max1)
min=max1;
fprintf(fout,"%d" ,min);
fclose(fi);
fclose(fout);
return 0;
}