Cod sursa(job #893315)

Utilizator fhandreiAndrei Hareza fhandrei Data 26 februarie 2013 14:54:50
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
// Include
#include <fstream>
using namespace std;

// Constante
const int sz = 16001;

// Functii
int bs(int left, int right);
bool match(int size);

// Variabile
ifstream in("transport.in");
ofstream out("transport.out");

int num, maxTrucks;
int values[sz];

// Main
int main()
{
	in >> num >> maxTrucks;;
	for(int i=1 ; i<=num ; ++i)
		in >> values[i];
	
	out << bs(1, sz);
	
	in.close();
	out.close();
	return 0;
}

int bs(int left, int right)
{
	int answer;
	while(left <= right)
	{
		int mid = (left + right)/2;
		if(match(mid))
		{
			right = mid - 1;
			answer = mid;
		}
		else
			left = mid + 1;
	}
	
	return answer;
}

bool match(int size)
{
	int trucks = 0;
	int sum = 0;
	for(int i=1 ; i<=num ; ++i)
	{
		if(size < values[i])
			return false;
		sum += values[i];
		if(sum > size)
		{
			if(++trucks == maxTrucks)
				return false;
			sum = values[i];
		}
	}
	return true;
}