Pagini recente » Cod sursa (job #2651097) | Cod sursa (job #2531670) | Cod sursa (job #305913) | Cod sursa (job #2660494) | Cod sursa (job #895595)
Cod sursa(job #895595)
#include <cstdio>
FILE *f=fopen("transport.in","r");
FILE *g=fopen("transport.out","w");
int n,k,v[16001];
int maxi(int v[16001],int &sum)
{
int i,max=-1;
for(i = 1; i <= n; i ++)
{
if(v[i]>max)
max=v[i];
sum+=v[i];
}
return max;
}
int okay(int x)
{
int times=1,i,semi=0;
for(i=1;i<=n;i++)
{
if(semi+v[i]<=x)
semi+=v[i];
else
{times++;semi=0;i--;}
}
return times;
}
int cauta(int x1,int x2)
{
int li,lf,m;
li=x1;
lf=x2;
while(li<=lf)
{
m=(li+lf)/2;
if(okay(m)<k)
lf=m-1;
else
if(okay(m)>k)
li=m+1;
else
if(okay(m)==k)
lf=m-1;
}
if (okay(m) > k) ++m;
return m;
}
int main()
{
fscanf(f,"%d%d",&n,&k);
int i,x,sum=0,y;
for(i = 1; i <= n; i ++)
fscanf(f,"%d",&v[i]);
x = maxi(v,sum);
y=cauta(x,sum);
fprintf(g,"%d",y);
return 0;
}