Pagini recente » Cod sursa (job #431451) | Cod sursa (job #1299085) | Cod sursa (job #2847525) | Cod sursa (job #533835) | Cod sursa (job #1528119)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
bool check(const vector<int>& v, const int k, const int c){
int nr_seg = 1;
for(int i = 0, s_cur = 0; i < v.size(); ++i){
if(s_cur+v[i] > c){
s_cur = v[i];
++nr_seg; }
else{
s_cur += v[i]; } }
return nr_seg <= k; }
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; }