Cod sursa(job #2007337)

Utilizator trifangrobertRobert Trifan trifangrobert Data 2 august 2017 15:40:57
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <algorithm>
#include <fstream>
#define INPUT_FILE "transport.in"
#define OUTPUT_FILE "transport.out"
#define DIMENSION 16010

using namespace std;

int n, k;
int v[DIMENSION];
int sum = 0;
int Max = 0;

void Read()
{
	ifstream f(INPUT_FILE);
	f >> n >> k;
	for (int i = 1;i <= n;++i)
	{
		f >> v[i];
		Max = max(Max, v[i]);
		sum += v[i];
	}
}

bool Verify(int x)
{
	int cx = x;
	int ck = k;
	for (int i = 1;i <= n;++i)
	{
		cx -= v[i];
		if (cx < 0)
		{
			ck--;
			cx = x - v[i];
		}
	}
	ck--;
	if (ck < 0)
		return false;
	return true;
}

int BinarySearch()
{
	int left = Max, right = sum;
	int mij;
	int sol;
	while (left <= right)
	{
		mij = (left + right) / 2;
		if (Verify(mij))
		{
			right = mij - 1;
			sol = mij;
		}
		else
		{
			left = mij + 1;
		}
	}
	return sol;
}

void Write()
{
	ofstream g(OUTPUT_FILE);
	g << BinarySearch() << "\n";
	g.close();
}

int main()
{
	Read();
	Write();
	return 0;
}