Pagini recente » Cod sursa (job #2192755) | Cod sursa (job #399016) | Cod sursa (job #2855290) | Cod sursa (job #2678783) | Cod sursa (job #314186)
Cod sursa(job #314186)
#include <stdio.h>
FILE *f,*s;
long int n,k,i,sum,max,rez,v[16005];
long int corect( long int c)
{
long int nr=1;
long int suma=0;
for(i=1;i<=n;i++)
{
suma+=v[i];
if(suma>c)
{
nr++;
suma=v[i];
}
if(nr>k)
return 0;
}
return (nr<=k);
}
long int cautareBinara()
{
long int st=max;
long int dr=sum;
while(st<=dr)
{
long int m=(st+dr)/2;
if(corect(m)&&!corect(m-1))
return m;
else
{
if(corect(m))
dr=m-1;
else
st=m+1;
}
}
return max;
}
int main()
{
f=fopen("transport.in","r");
s=fopen("transport.out","w");
fscanf(f,"%ld %ld\n",&n,&k);
for(i=1;i<=n;i++)
{
fscanf(f,"%ld\n",&v[i]);
if(v[i]>max)
max=v[i];
sum+=v[i];
}
rez=cautareBinara();
fprintf(s,"%ld",rez);
fclose(s);
return 0;
}