Pagini recente » Cod sursa (job #609448) | Cod sursa (job #2377429) | Cod sursa (job #1261842) | Cod sursa (job #1328706) | Cod sursa (job #2749664)
#include<fstream>
using namespace std;
long long int v[16000],s[16000];
int main(){
ifstream in("transport.in");
ofstream out("transport.out");
long long int n,k,m=0;
in>>n>>k;
s[0]=0;
for(long long int i=1;i<=n;i++){
in>>v[i];
if(m<v[i]){
m=v[i];
}
s[i]=s[i-1]+v[i];
}
long long int stanga=m,dreapta=s[n],capacitate;
while(stanga<dreapta){
long long int mijloc=(stanga+dreapta)/2,numar=0,x;
x=mijloc;
for(long long int i=1;i<=n;i++){
for(long long int j=1;j<=n;j++){
if(s[j]>x){
numar++;
i=j;
x=s[j-1]+mijloc;
break;
}
}
}
numar++;
if(numar<=k){
capacitate=mijloc;
dreapta=mijloc;
}else{
stanga=mijloc;
}
if(mijloc==stanga){
break;
}
}
out<<capacitate;
}