Pagini recente » Cod sursa (job #694174) | Simulare 05 | Cod sursa (job #1138248) | Cod sursa (job #2574347) | Cod sursa (job #703359)
Cod sursa(job #703359)
#include<cstdio>
using namespace std;
long long int n,k,v[16000],dmax,dmin,x,verif,j,d,ok;
bool verifk (int a)
{ int ans = 1;
int i , s = 0;
for (i=1;i<=n;i++){
if (s + v[i] > a){
s=v[i];
ans++;
if (ans>k) return false;
}
else s+=v[i];
}
return (ans <= k);
}
int cautarebin(int st, int dr)
{
while (st<=dr){
d=(st+dr)/2;
if (verifk(d)&&verifk(d-1)==0) return d;
else if (verifk(d)) dr=d-1;
else st=d+1;
}
return -1;
}
int main()
{
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
scanf("%lld %lld",&n,&k);
for (j=1;j<=n;j++){
scanf("%lld",&v[j]);
if(ok==0){
dmin=v[j];
ok=1;
}
if (dmax<v[j])
dmin=v[j];
dmax+=v[j];
}
printf("%lld",cautarebin(dmin,dmax));
return 0;
}