Pagini recente » Cod sursa (job #315233) | Cod sursa (job #2596386) | Cod sursa (job #2172520) | Cod sursa (job #1126753) | Cod sursa (job #3256018)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
bool canFormSums(const vector<int>& arr, int k, int q, int target) {
int currentSum = 0, parts = 1;
for (int i = 0; i < k; i++) {
if (arr[i] > target) return false;
if (currentSum + arr[i] > target) {
parts++;
currentSum = arr[i];
if (parts > q) return false;
}
else {
currentSum += arr[i];
}
}
return true;
}
int findMinimumLargestSum(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 answer = right;
while (left <= right) {
int mid = left + (right - left) / 2;
if (canFormSums(arr, k, q, mid)) {
answer = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
return answer;
}
int main() {
int len, q;
fin >> len >> q;
vector<int> arr(len);
for (int i = 0; i < len; i++) {
fin >> arr[i];
}
fout << findMinimumLargestSum(arr, len, q);
return 0;
}