Cod sursa(job #2620883)

Utilizator vladdudauDudau Vlad vladdudau Data 29 mai 2020 20:10:16
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <bits/stdc++.h>

#define N 16001
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int n, k;
int g[N];
int st, dr;
int capacitate = -1;

void citeste()
{
	fin>>n>>k;
	for(int i = 0; i < n; ++i)
		{
		    fin>>g[i];
		    dr += g[i];
		     st = (st < g[i]) ? g[i] : st;
		}
}

int verifica(int val)
{
	int nrTransp, curent;
	int i;

	for(i = curent = 0, nrTransp = 1; i < n; ++i)
	{
		if(curent + g[i] > val)
		{
			curent = g[i];
			++nrTransp;
		}
		else
		{
			curent += g[i];
		}
		if(nrTransp > k)
			return 0;
	}
	return 1;
}

void cautBin()
{
	int mijloc;

	dr += st;

	while(st <= dr)
	{
		mijloc = (st + dr)/2;

		if(verifica(mijloc))
		{
			capacitate = mijloc;
			dr = mijloc-1;
		}
		else
		{
			st = mijloc+1;
		}
	}
}

int main()
{

	citeste();

	cautBin();

	fout<<capacitate;

	return 0;
}