Cod sursa(job #1789813)

Utilizator RadduFMI Dinu Radu Raddu Data 27 octombrie 2016 15:38:53
Problema Transport Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#define ll long long
using namespace std;
int lim,mn;
int n, k, p, n1, n2, v[16005];

ifstream f("transport.in");
ofstream g("transport.out");

int  Test(int val)
{
	int i, nrbuc = 0, left = -1;

	for (i = 1; i <= n; i++)
	{ if (v[i] <= left) left -= v[i];
		else 
		 { nrbuc++; 
	        if (nrbuc > k) return nrbuc;
	       left = val - v[i]; 
		 }
	}

	return nrbuc;
}

void Cbin()
{
	int st = mn, dr = lim, mid;

	while (st < dr)
	{
		mid = (st + dr) / 2;
		if (Test(mid) <= k) dr = mid - 1; else st = mid + 1;
	}

	mid = (st + dr) / 2;

	if (Test(mid)>k) mid++;

	g << mid << "\n";
}

int main()
{
	int i;
	f >> n >> k;
	for (i = 1; i <= n; i++)
	{
		f >> v[i];
		mn = max(mn, v[i]);
		lim += v[i];
	}


	Cbin();
	
	return 0;
}