Pagini recente » Cod sursa (job #1562092) | Cod sursa (job #154787) | Cod sursa (job #3134733) | Cod sursa (job #1761131) | Cod sursa (job #136784)
Cod sursa(job #136784)
#include<stdio.h>
long int n,k,i,v[16002],c1,c2,sol;
long int cbin(long int cmin,long int cmax);
long int merge(long int c);
int main()
{
FILE *f,*g;f=fopen("transport.in","r");g=fopen("transport.out","w");
fscanf(f,"%ld%ld",&n,&k);
for(i=1;i<=n;i++)
{ fscanf(f,"%ld",&v[i]);c1=(c1>v[i])?c1:v[i];c2+=v[i];}
sol=cbin(c1,c2);
fprintf(g,"%ld\n",sol);
fcloseall();
return 0;
}
long int cbin(long int cmin,long int cmax)
{ long int cmed;
if(cmin==cmax) return cmin;
cmed=(cmin+cmax)/2;
if(merge(cmed))return cbin(cmin,cmed);
return cbin(cmed+1,cmax);
}
long int merge(long int c)
{
long int nt,p,incarcat;
nt=0;p=1;incarcat=0;
while(nt<k&&p<=n)
{ if(incarcat+v[p]<=c){incarcat+=v[p];p++;}
else {nt++;incarcat=0;}
}
if(nt==k)return 0;
return 1;
}