Cod sursa(job #1738212)

Utilizator vladc096Vlad Cincean vladc096 Data 5 august 2016 22:50:30
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>

using namespace std;

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

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

long long bin_search(long long st, long long dr) {
	long long m = -1;

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

	return m;
}

int main() {
	long long sol;

	// input
	ifstream f("transport.in");
	f >> N >> K;
	s = new int[N];
	for (int 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);

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

	// free memory
	delete[] s;

	return 0;
}