Cod sursa(job #2605511)

Utilizator irimia_alexIrimia Alex irimia_alex Data 25 aprilie 2020 12:31:58
Problema Transport Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <iostream>
#include <fstream>

#define NMAX 16000

using namespace std;

ifstream fin("transport.in");
ofstream fout("transport.out");

int v[NMAX], n, k;

int min() {
	int m = v[0];
	for (int i = 1;i < n;++i)
		if (v[i] > m) m = v[i];
	return m;
}

int max() {
	int s = 0;
	for (int i = 0;i < n;++i)
		s += v[i];
	return s;
}

int get_transports(int vol) {
	int nr = 0, i = 0, s;
	while (i < n) {
		s = 0;
		while (s + v[i] <= vol && i < n) s += v[i++];
		++nr;
	}

	return nr;

}

int solve() {
	int low = min(), high = max();
	while (low <= high) {
		int m = low + (high - low) / 2;
		int t = get_transports(m);
		if (t <= k && get_transports(m - 1) > k) return m;
		if (t <= k)
			high = m - 1;
		else
			low = m + 1;
	}
	
	return -1;
}

int main()
{
	fin >> n >> k;
	for (int i = 0;i < n;++i)
		fin >> v[i];

	fout<<solve();

	return 0;
}