Pagini recente » Cod sursa (job #2369907) | Cod sursa (job #1099129) | Cod sursa (job #520445) | Cod sursa (job #2868992) | Cod sursa (job #1528118)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
bool check(const vector<int>& v, const int k, const int c){
for(int nr_seg = 1, i = 0, s_cur = 0; i < v.size(); ++i){
if(s_cur+v[i] > c){
s_cur = v[i];
++nr_seg;
if(nr_seg > k){
return false; } }
else{
s_cur += v[i]; } }
return true; }
int cbin(const vector<int>& v, const int k){
int st = *max_element(begin(v), end(v)), dr = 16000*16000+1;
for(int step = 1<<(int)log2(dr-st+1); step > 0; step /= 2){
if(!check(v, k, st+step)){
st += step; } }
return st+1; }
int main(){
ifstream f("transport.in");
ofstream g("transport.out");
int n, k;
f >> n >> k;
vector<int> v(n);
for(auto& x : v){
f >> x; }
g << cbin(v, k);
return 0; }