Cod sursa(job #2659915)

Utilizator dream3rDavid Pop dream3r Data 17 octombrie 2020 19:40:07
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <climits>
#include <queue>
#define max(a,b) a > b ? a : b
#define ll long long int
using namespace std;
ifstream f("transport.in");
ofstream o("transport.out");

int n, k;
vector<int>v;

bool check(int mijloc)
{
	int suma = 0;
	int trans = 0;
	for (int i = 0; i < n; i++)
	{
		suma += v[i];

		if (v[i] > mijloc)
		{
			return false;
		}

		if (suma > mijloc)
		{
			suma = v[i];
			trans++;
		}

	}

	if (suma > 0)
	{
		trans++;
	}

	return (trans <= k);
}


int main()
{
	f >> n >> k;
	for (size_t i = 0; i < n; i++)
	{
		int x;
		f >> x;
		v.push_back(x);
	}

	int stanga = 0;
	int dreapta = INT32_MAX - 5;
	while (stanga <= dreapta)
	{
		int mijloc = (stanga + dreapta) / 2;
		if (check(mijloc))
		{
			dreapta = mijloc - 1;

		}
		else
		{
			stanga = mijloc + 1;
		}

	}
	o << dreapta + 1;
}