Cod sursa(job #2862134)

Utilizator _Tudor_Tudor C _Tudor_ Data 4 martie 2022 22:07:30
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
//#include "incl.h"

#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <vector>
#include <algorithm>
#include <utility>
#include <queue>
#include <stack>

using std::cout;
using std::cin;

std::ifstream fin("transport.in");
std::ofstream fout("transport.out");

const int Nmax = 16005;
int arr[Nmax];
int n, k;

bool check(int c)
{
	int gr = 0, vol, i = 0;

	while(i < n)
	{
		gr++;
		vol = 0;
		while(i < n && (vol + arr[i]) <= c)
		{
			vol += arr[i];
			i++;
		}
		if(vol == 0)
			return false;
	}
	
	if(gr <= k && i == n)
		return true;
	return false;
}

int main()
{
	fin >> n >> k;
	for(int i = 0; i < n; i++)
		fin >> arr[i];

	int left = 0, right = 16000 * 16000 + 2;

	while(left != right)
	{
		int mid = (left + right) / 2;
		if(check(mid))
			right = mid;
		else
			left = mid + 1;
	}

	if(check(left))
		fout << left;
	else
		fout << left + 1;
}