Cod sursa(job #1738203)

Utilizator vladc096Vlad Cincean vladc096 Data 5 august 2016 22:40:29
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>

using namespace std;

short N, K;
short* s;
short maximum = 0;
long sum = 0;

bool check(long C) {
	short i = 0, t = K;
	long c = 0;
	while (t > 0) {
		if (c + s[i] <= C)
			c += s[i++];
		else {
			c = 0;
			t--;
		}
	}
	if (i < N)
		return false;
	return true;
}

long bin_search(long st, long dr) {
	long m;

	while (st <= dr) {
		m = st + (dr - st) / 2;
		if (check(m))
			return m;
		else
			st = m + 1;
	}
}

int main() {
	long sol;

	// input
	ifstream f("transport.in");
	f >> N >> K;
	s = new short[N];
	for (short i = 0; i < N; i++) {
		f >> s[i];
		sum += s[i];
		maximum = s[i] > maximum ? s[i] : maximum;
	}
	f.close();

	// solve
	sol = bin_search(maximum, sum);
	while (check(sol - 1))
		sol--;

	// output
	ofstream g("transport.out");
	g << sol << '\n';
	g.close();

	// free memory
	delete[] s;

	return 0;
}