Pagini recente » Cod sursa (job #2678783) | Cod sursa (job #314186) | Cod sursa (job #249999) | Cod sursa (job #2705579) | Cod sursa (job #3152467)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("transport.in");
ofstream cout("transport.out");
int med, sol, v[16001] , k;
int drum(vector<int> v, int n, int cant){
int drumuri = 1, vol = 0;
for(auto i = v.begin(); i != v.end(); i++){
if(vol + *i <= cant){
vol += *i;
}
else{
vol = *i;
drumuri++;
}
if(drumuri > k)
return INT_MAX;
}
return drumuri;
}
void caut(vector<int> v, int y, int n, int k){
int st = 1, dr = 16000 * 16000;
int ans = 1;
while(st <= dr){
med = (st + dr) / 2;
if(drum(v, n, med) <= k){
sol = med;
dr = med - 1;
}
else{
st = med + 1;
}
}
}
int main(){
int n, maxx = -1;
vector<int> v;
cin>>n>>k;
for(int i = n; i >= 1; i--){
int x;
cin>>x;
maxx = max(maxx, x);
v.push_back(x);
}
caut(v, v.back(), n, k);
cout<<sol;
return 0;
}