Pagini recente » Cod sursa (job #2007232) | Cod sursa (job #1580168) | Cod sursa (job #1604927) | Autentificare | Cod sursa (job #688006)
Cod sursa(job #688006)
#include<cstdio>
using namespace std;
long long int n,k,v[16000],d=2000000000,dmax,dmin,x,verif,j,verif2;
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 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]);
d=d/2;
verif=verifk(d);
if (verif==1){
while (verif==1){
dmax=d;
d=d/2;
verif=verifk(d);
dmin=d;
}
verif=1;
while (verif==1){
d=dmin+(dmax-dmin)/2;
verif=verifk(d);
if (verif==1) dmax=d;
else dmin=d;
}
}
else{
dmax=2*10^9;
while (verif==0){
dmin=d;
d=dmin+(dmax-dmin)/2;
verif=verifk(d);
if (verif==0) dmin=d;
else dmax=d;
}
}
verif2=verifk(dmax);
while (verif==0&&verif2==1){
verif=verifk(dmin);
if (verif==0) dmin++;
verif2=verifk(dmax);
if (verif2==1)dmax--;
}
printf("%lld",dmin);
return 0;
}