Cod sursa(job #3256128)

Utilizator RaraselzPetre Rares Mihail Raraselz Data 13 noiembrie 2024 16:18:07
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <bits/stdc++.h>

using namespace std;

// K = MARIME VECTOR

bool valid(const vector<int>& arr, int k, int q, int capacitate) {
	int s = arr[0], parti=1;
	
	for (int i = 1; i < k; i++) {
		if (s + arr[i] > capacitate) {
			s = arr[i];
			parti++;
			if (parti > q) {
				return false;
			}
		}
		else {
			s += arr[i];
		}
	}
	
	return true;
}

int f(const vector<int>& arr, int k, int q) {
	int left = *max_element(arr.begin(), arr.end());
	int right = accumulate(arr.begin(), arr.end(), 0);
	int capacitate = right;	
		
	while (left <= right) {
		int middle = (left + right) / 2;
		if (valid(arr, k, q, middle)) {
			capacitate = middle;
			right = middle-1;
		}
		else {
			left = middle+1;
		}
	}
	return capacitate;
	
}



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

int main() {
	
	int k, q;
	fin >> k >> q;
	vector<int> arr(k);
	
	for (int i = 0; i < k; i++) {
		fin >> arr[i]; 
	}
	
	fout << f(arr, k, q);
	
	return 0;
}