Pagini recente » Cod sursa (job #618255) | Cod sursa (job #68430) | Cod sursa (job #2754726) | Cod sursa (job #1824103) | Cod sursa (job #3256128)
#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;
}