Pagini recente » Cod sursa (job #1002665) | Cod sursa (job #2122133) | Cod sursa (job #2719825) | Cod sursa (job #1956135) | Cod sursa (job #2519715)
#include <iostream>
#include <fstream>
#include <vector>
std::ifstream f("transport.in");
std::ofstream g("transport.out");
int n,k,maxx;
std::vector<int>v;
bool Check(int value){
int cnt{};
int s{};
for(int i = 0;i < n;++i){
if(v[i] > value)
return 0;
if(s + v[i] <= value)
s += v[i];
else{
cnt++;
s = v[i];
}
}
if(s != 0)
cnt++;
return cnt <= k;
}
int main(){
f >> n >> k;
v.resize(n);
for(int i = 0;i < n;++i){
f >> v[i];
maxx = std::max(maxx,v[i]);
}
int left = maxx;
int right = 16'000 * 16'000;
int sol = -1;
while(left <= right){
int mid = (left + right) / 2;
if(Check(mid)){
sol = mid;
right = mid - 1;
}else
left = mid + 1;
}
g << sol;
return 0;
}