Pagini recente » Cod sursa (job #1768986) | Cod sursa (job #254064) | Cod sursa (job #2296264) | Cod sursa (job #698355) | Cod sursa (job #2445361)
#include <bits/stdc++.h>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int Verif(int);
int BS(int, int);
int n,k,maxim=-1,total,capacity;
int saltele[16001];
int main(){
in>>n>>k;
for(int i=1;i<=n;++i){
in>>saltele[i];
if(maxim<saltele[i])
maxim=saltele[i];
total+=saltele[i];
}
if((total+1)/n<maxim)
capacity=maxim;
out << BS(maxim,total);
return 0;
}
int Verif(int c){
bool el=true;
int cont=0,i=1;
while(i<=n){
int sum=0;
while(1){
if(sum+saltele[i]<=c)
sum+=saltele[i++];
else
break;
}
++cont;
}
if(cont==k)
return 0;
if(cont<k)
return -1;
if(cont>k)
return 1;
}
int BS(int st,int dr){
int mij,poz;
while(st<=dr){
mij=st+(dr-st)/2;
int verif=Verif(mij);
if(verif==0){
poz=mij;
dr=mij-1;
}
else{
if(verif==1)
st=mij+1;
else
dr=mij-1;
}
}
return poz;
}