Cod sursa(job #1041752)

Utilizator BionicMushroomFMI - Dumitrescu Tiberiu Alexandru BionicMushroom Data 26 noiembrie 2013 02:57:06
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<fstream>
using namespace std;

ifstream f ("transport.in");
ofstream g ("transport.out");
short *a, n, k, step_init;

bool depaseste (int val)
{
	if (val < a[0])
		return true;
	short i = 0, step, drumuri = 0, sum = 0;
	while (i < n - 1 && drumuri <= k)
	{
		step = step_init;
		for (i = 0; step; step >>= 1)
			if (i + step < n && a[i + step] - sum <= val)
				i += step;
		drumuri++;
		sum = a[i];
	}
	if (drumuri <= k)
		return false;
	else
		return true;
}

int main ()
{
	short lim_s = 0, lim_d, capacitate, m;
	f >> n >> k;
	a = new short[n];
	f >> a[0];
	for (short i = 1; i < n; i++)
	{
		f >> a[i];
		a[i] += a[i - 1];
	}
	for (step_init = 1; step_init < n; step_init <<= 1);
	capacitate = lim_d = a[n - 1];
	while (lim_s < lim_d - 1)
	{
		m = (lim_d + lim_s) / 2;
		if (!depaseste(m))
		{
			capacitate = m;
			lim_d >>= 1;
		}
		else
		{
			lim_s = m;
			lim_d = capacitate;
		}
	}
	g << capacitate;
	return 0;
}