Pagini recente » Cod sursa (job #29576) | Cod sursa (job #822862) | Cod sursa (job #2768221) | Cod sursa (job #3285275) | Cod sursa (job #2185272)
#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,now=dr;
while(st < dr-1){
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 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);
}