Pagini recente » Cod sursa (job #853033) | Cod sursa (job #1444980) | Cod sursa (job #3123247) | Cod sursa (job #227106) | Cod sursa (job #95368)
Cod sursa(job #95368)
#include<stdio.h>
int v[16010], k, n, max, nr, s;
void citire()
{
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
scanf("%d %d",&n,&k);
int i;
for (i=1; i<=n; i++){ scanf("%d",v+i); if (max<v[i]) max=v[i];s+=v[i];}
if (s/k>max) nr=s/k;
else nr=max;
}
int verif(int x)
{
int i, j, s;
i=1;
j=0;
int ok2=1;
while (i<=n && ok2)
{
s=0;
while (s<x && i<=n) {s+=v[i]; i++;}
if (s>x) i--;
j++;
if (j>k) ok2=0;
}
if (i>n && ok2) return 1;
return 0;
}
int cauta(int p, int u)
{
int m;
m=(p+u)/2;
while (p<=u)
{
if (verif(m)) if (!verif(m-1)) return m;
else {u=m-1; m=(p+u)/2;}
else {p=m+1; m=(p+u)/2;}
}
return 0;
}
void calcul()
{
int i, j, rez;
rez=cauta(nr,s);
printf("%d\n",rez);
}
int main()
{
citire();
calcul();
return 0;
}