Cod sursa(job #1528120)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 19 noiembrie 2015 07:37:32
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#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))-1, dr = accumulate(begin(v), end(v), 0)+1;
	for(int step = 1<<(int)log2(dr-st+1); step > 0; step /= 2){
		if(st+step <= dr && !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; }