Cod sursa(job #2103554)

Utilizator brczBereczki Norbert Cristian brcz Data 10 ianuarie 2018 14:49:01
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<bits/stdc++.h>

#define ll long long
#define pii pair<int,int>
#define pll pair<ll,ll>
#define fi first
#define se second
#define sz size
#define pb push_back
#define mp make_pair
#define bg begin
#define nd end
using namespace std;

#define int long long

const int maxn = 100003;
const int maxk = 16003;

int n,k,a[maxk];

bool check(int x) {
	int sum = 0;
	int cst = 0;
	for(int i=0;i<n;++i) {
		if(sum + a[i] > x){
			++cst;
			sum = 0;
		}
		sum += a[i];
	}
	if(sum) ++cst;
	return cst <= k;
}

int32_t main(){

	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);

	ios_base::sync_with_stdio(false);
	cin.tie(0);

	cin >> n >> k;
	int lo = 1;
	for(int i=0;i<n;++i) {
		cin >> a[i];
		lo = max(lo,a[i]);
	}
	int hi = (1e9);
	while(hi - lo > 1) {
		int mid = (lo + hi) / 2;
		if(check(mid))
			hi = mid;
		else
			lo = mid;
	}
	int res = hi;
	if(check(lo))
		res = lo;
	cout << res << '\n';

	return 0;
}