Cod sursa(job #1040281)

Utilizator TwoOfDiamondsDaniel Alexandru Radu TwoOfDiamonds Data 24 noiembrie 2013 12:37:10
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <vector>

using namespace std;

bool verif(long long x, vector<int> &vec, int k)
{
	long long currSize = 0;
	int noOfT = 1;

	for (int i = vec.size() - 1; i >= 0; i--)
	{
		if (x < vec[i])
			return false;

		if (currSize + vec[i] > x)
		{
			noOfT++;
			currSize = vec[i];
		}
		else
		{
			currSize += vec[i];
		}

		if (noOfT > k)
			return false;
	}

	if (noOfT <= k)
		return true;
}

int main()
{
	ifstream IN("transport.in");
	ofstream OUT("transport.out");

	vector<int> vec;
	int n, k;

	IN >> n >> k;

	for (int i = 0; i < n; i++)
	{
		int x;
		IN >> x;

		vec.push_back(x);
	}

	long long pas = 1 << 28;
	long long poz = 0;
	long long rez;

	while (pas > 0)
	{
		if (verif(pas + poz, vec, k))
			rez = pas + poz;
		else
			poz += pas;

		pas >>= 1;
	}

	OUT << rez << "\n";

	return 0;
}