Cod sursa(job #1105827)

Utilizator CosminRusuCosmin Rusu CosminRusu Data 12 februarie 2014 09:55:00
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>
using namespace std;

const int MAXN = 16005;
int N, K, st[MAXN];

inline bool Check(const int &value) {
	int newTransport = 0, transports = 0;
	for(int i = 1 ; i <= N ; ++ i) {
		if(newTransport + st[i] < value)
			newTransport += st[i];
		else {
			if(st[i] > value)
				return false;
			newTransport = st[i];
			++ transports;
		}
	}
	return transports <= K;
}

inline int binarySearch() {
	int li = 0, ls = MAXN * MAXN, ans = -1;
	while(li <= ls) {
		int mid = (li + ls) / 2;
		if(Check(mid)) {
			ls = mid - 1;
			ans = mid;
		}
		else li = mid + 1;
	}
	return ans;
}

int main() {
	ifstream fin("transport.in");
	ofstream fout("transport.out");
	fin >> N >> K;
	for(int i = 1 ; i <= N ; ++ i)
		fin >> st[i];
	fout << binarySearch() << '\n';
	return 0;
}