Cod sursa(job #471850)

Utilizator darrenRares Buhai darren Data 21 iulie 2010 14:19:53
Problema Transport Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#include <stack>

using namespace std;

const int INF = 1 << 20;
const int SIZE = 16001;

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

void Read();
void Solve();
bool Test(int x);
void Write();

int n, k, mn;
int v[SIZE];

int main()
{
	Read();
	Solve();
	Write();
}

void Read()
{
	fin >> n >> k;
	for (int i = 1; i <= n; ++i)
		fin >> v[i];
}

void Solve()
{
	int step;
	for (step = 1; step << 1 <= INF; step <<= 1);
	for (int i = INF; step; step >>= 1)
		if (i - step >= 0 && Test(i - step))
			i -= step, mn = i;
}

bool Test(int x)
{
	int now = 0, how = 1;
	for (int i = 1; i <= n; ++i)
	{
		if (v[i] > x) return false;
		if (v[i] + now <= x) now += v[i];
		else                ++how, now = v[i];
		if (how > k) return false;
	}
	return true;
}

void Write()
{
	fout << mn;
}