Pagini recente » Cod sursa (job #995655) | Cod sursa (job #8545) | Cod sursa (job #2316372) | Cod sursa (job #338545) | Cod sursa (job #365551)
Cod sursa(job #365551)
#include<stdio.h>
long n,k,max,a[16000],suma=0;
long bsearch();
int verif(long c);
int main()
{
FILE*f=fopen("transport.in","r");
fscanf(f,"%d%d",&n,&k);
int i=0;
for(i,max=0;i<n;++i)
{
fscanf(f,"%d",&a[i]);
if(a[i]>max)max=a[i];
suma+=a[i];
}
fclose(f);
FILE*g=fopen("transport.out","w");
fprintf(g,"%d\n",bsearch());
fclose(g);
return 0;
}
long bsearch()
{
long lo=max,hi=suma,c,last;
while(lo<=hi)
{
c=lo+(hi-lo)/2;
if(verif(c)<=k){last=c;hi=c-1;}
else lo=c+1;
}
return last;
}
int verif(long c)
{
int i=0,s=0,x=0;
while(i<n)
{
if(a[i]>c)return 0;
if(a[i]+s<=c)s+=a[i];
else{s=a[i];++x;}
++i;
}
return x+1;
}