Cod sursa(job #742425)
#include<iostream>
#include<fstream>
using namespace std;
int v[16001],n,k;
inline int suma(int i)
{
if(i==0)
return 0;
else return v[i]+suma(i-1);
}
inline int camioane(int c)
{
int s,i,nr;
s=0;
nr=1;
for(i=1;i<=n;i++) {
if((s+v[i])<=c)
s=s+v[i];
else {
nr++;
s=v[i];
}
}
return nr;
}
inline int cautarebinara()
{
int p,q,min,nr,mij,i;
p=2000000000;
for(i=1;i<=n;i++)
if(v[i]<p)
p=v[i];
q=suma(n);
min=2000000000;
while(p<=q) {
mij=p+(q-p)/2;
nr=camioane(mij);
if(nr>k)
p=mij+1;
else if(nr<=k) {
min=mij;
q=mij-1;
}
}
mij=p+(q-p)/2;
nr=camioane(mij);
if(nr<=k)
min=mij;
return min;
}
int main ()
{
int i;
ifstream f("transport.in");
ofstream g("transport.out");
f>>n>>k;
for(i=1;i<=n;i++)
f>>v[i];
f.close();
g<<cautarebinara();
g.close();
return 0;
}