Pagini recente » Cod sursa (job #2574165) | Cod sursa (job #1886175) | Cod sursa (job #1924238) | Soluții Summer Challenge 2009, Runda 2 | Cod sursa (job #96831)
Cod sursa(job #96831)
#include <stdio.h>
int main()
{
long nr,t,r,p,q,i,j,k,n;
long a[16000];
freopen("transpor.in","r",stdin);
freopen("transpor.out","w",stdout);
scanf("%ld%ld",&n,&k);
p=0;q=0;
for (i=1; i<=n; i++)
{
scanf("%ld",&a[i]);
q=q+a[i];
if (a[i]>p) p=a[i];
}
while (p<q)
{
r=(p+q)/2;
t=0;nr=0;
i=0;
while (i<n)
{
i++;
if (t+a[i]<r)
t=t+a[i];
else
{
nr++;
t=0;
i--;
}
}
nr++;
if (nr==k) break;
else if (nr>k) p=r;
else q=r;
}
q=1;
while (q && p>0)
{
p=r-1;
i=0;t=0;nr=0;
while (i<n)
{
i++;
if (t+a[i]<=p)
t=t+a[i];
else
{
nr++;
t=0;
i--;
}
}
nr++;
if (nr==k) r--;
else q=0;
}
printf("%ld",r);
return 0;
}