Cod sursa(job #1387512)

Utilizator mircea.dobreanuMircea Dobreanu mircea.dobreanu Data 14 martie 2015 12:57:59
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <algorithm>
#include <fstream>
#include <numeric>
#include <vector>
using namespace std;
int n, k, res;
vector<int> v;

void read()
{
	ifstream fin("transport.in");
	fin >> n >> k;
	for (int i = 0; i < n; ++i)
	{
		int x;	fin >> x;
		v.push_back(x);
	}
	fin.close();
}

void write()
{
	ofstream fout("transport.out");
	fout << res << '\n';
	fout.close();
}

int countRounds(int c)
{
	int ans = 1, remainingCapacity = c;
	for (size_t i = 0; i < v.size(); ++i)
	{
		if (remainingCapacity < v[i])
		{
			++ans;
			remainingCapacity = c - v[i];
		}
		else
			remainingCapacity -= v[i];
	}
	return ans;
}


void solve()
{
	int sum = accumulate(v.begin(), v.end(), 0);
	int maxEl = *max_element(v.begin(), v.end());

	int l = maxEl, r = sum;
	while (l <= r)
	{
		int mid = (l + r) / 2;
		int rounds = countRounds(mid);
		if (rounds <= k)
			r = mid - 1;
		else
			l = mid + 1;
	}
	res = l;
}

int main()
{
	read();
	solve();
	write();
	return 0;
}