Cod sursa(job #2633546)

Utilizator Razvan48Capatina Razvan Nicolae Razvan48 Data 7 iulie 2020 18:49:23
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
using namespace std;

const int NMAX = 16000;
int saltele[1 + NMAX];
int n, k, maxim;

bool verific(int valoare)
{
	int nrTrans = 0;
	int capCrt=0;
	for (int i = 1; i <= n; i++)
	{
		capCrt = capCrt + saltele[i];
		if (capCrt > valoare)
		{
			capCrt = saltele[i];
			nrTrans++;
		}
	}
    nrTrans++;
	if (nrTrans > k)
		return false;
	return true;
}

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

	f >> n >> k;
	for (int i = 1; i <= n; i++)
	{
		f >> saltele[i];
		if (saltele[i] > maxim)
		{
			maxim = saltele[i];
		}
	}

	int st = maxim;
	int dr = NMAX * NMAX;
	int sol = NMAX * NMAX;
	int mijloc;
	while (st <= dr)
	{
		mijloc = (st + dr) / 2;
		if (verific(mijloc))
		{
			sol = mijloc;
			dr = mijloc - 1;
		}
		else
		{
			st = mijloc + 1;
		}
	}

	g << sol;

	return 0;
}