Cod sursa(job #1437576)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 17 mai 2015 22:56:32
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<fstream>
#include<vector>
using namespace std;

const int lim = 16000 * 16000;

bool tran(const vector<int>& saltele, const int k, const int cap)
{
	int sz = saltele.size();
	
	int sum = 0;
	int cnt = 0;
	for(int i = 0;i < sz;++i)
	{
		if(sum + saltele[i] <= cap)
		{
			sum += saltele[i];
		}
		else
		{
			if(saltele[i] <= cap)
			{
				sum = saltele[i];
				++cnt;
			}
			else
			{
				return false;
			}
		}
	}
	
	if(cnt + 1 <= k)
	{
		return true;
	}
	
	return false;
}

int solve(const vector<int>& saltele, const int k)
{
	int left = 1, right = lim;
	
	while(left <= right)
	{
		int mid = left + (right - left) / 2;
		bool rez = tran(saltele, k, mid);
		
		if(rez)
		{
			right = mid - 1;
		}
		else
		{
			left = mid + 1;
		}
	}
	
	return left;
}

int main()
{
	ifstream in("transport.in");
	ofstream out("transport.out");
	
	int n, k;
	in >> n >> k;
	
	vector<int> saltele;
	int nr;
	
	for(int i = 0;i < n;++i)
	{
		in >> nr;
		saltele.push_back(nr);
	}
	
	out<<solve(saltele, k)<<"\n";
	
	in.close();
	out.close();
}