Cod sursa(job #1045234)

Utilizator BionicMushroomFMI - Dumitrescu Tiberiu Alexandru BionicMushroom Data 1 decembrie 2013 05:45:49
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<fstream>
using namespace std;

short n, k, *v;

bool depaseste (short capacitate)
{
	int sum = 0, drumuri = 1;
	for (short i = 0; i < n; i++)
	{	
		sum += v[i];
		if (sum  > capacitate)
		{
			sum = v[i];
			drumuri++;
			if (drumuri > k)
				return true;
		}
	}
	return false;
}

int main()
{
	int lim_s, lim_d, step;
	bool atribuit = false;
	ifstream f ("transport.in");
	f >> n >> k;
	v = new short[n];
	f >> v[0];
	lim_s = lim_d = v[0];
	for (short i = 1; i < n; i++)
	{
		f >> v[i];
		lim_d += v[i];
		if (lim_s < v[i])
			lim_s = v[i];
	}
	f.close();
	ofstream g ("transport.out");
	if (k >= lim_d)
		g << lim_s;
	else
	{
		for (step = 1; step < lim_d; step <<= 1);
		for (lim_s = 0; step; step >>= 1)
			if (lim_s + step < lim_d && depaseste(lim_s + step))
			{
				lim_s += step;
				atribuit = true;
			}
		if (atribuit)
			g << lim_s + 1;
		else
			g << lim_s;
	}
	g.close();
	return 0;
}