Pagini recente » Cod sursa (job #1527306) | Cod sursa (job #2754503) | Cod sursa (job #1953170) | Cod sursa (job #2087454) | Cod sursa (job #2185312)
#include <fstream>
#define ll long long
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
ll v[16010],sum,g,n;
ll cautbin(ll mx){
ll st = 1,dr = sum;
ll sum2=0,mij,i,counter=0,now=dr;
ll c;
while(st < dr){
c = dr;
mij = (st+dr)/2;
sum2=0;
counter=0;
if(dr < mx){
st = dr;
dr = (dr+now)/2;
continue;
}
for(i = 1; i <= n; i++){
if(sum2+v[i] < dr) sum2 += v[i];
else if(sum2+v[i] == dr) counter++,sum2=0;
else i--,counter++,sum2=0;
}
if(sum2 && sum2 < dr) counter++,sum2=0;
if(counter > g){
st = dr;
dr = (dr+now)/2;
}
else now=dr,dr = mij;
}
return c;
}
int main()
{
fin>>n>>g;
ll i,mx=0,nr;
for(i = 1; i <= n; i++){
fin>>nr;
v[i] = nr;
sum+=nr;
mx = max(mx,nr);
}
fout<<cautbin(mx);
}