Pagini recente » Cod sursa (job #1785477) | Cod sursa (job #2363515) | Cod sursa (job #1645573) | Cod sursa (job #2189883) | Cod sursa (job #2185247)
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int v[16010],sum,g,n;
int cautbin(int mx){
int st = 1,dr = sum;
int sum2=0,mij,i,counter=0;
while(st < dr-1){
mij = (st+dr)/2;
sum2=0;
counter=0;
if(dr < mx){
st = dr;
dr = dr+(dr-mij);
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+(dr-mij);
}
else dr = mij;
}
return dr;
}
int main()
{
fin>>n>>g;
int i,mx=0,nr;
for(i = 1; i <= n; i++){
fin>>nr;
v[i] = nr;
sum+=nr;
mx = max(mx,nr);
}
fout<<cautbin(mx);
}