Pagini recente » Cod sursa (job #2175849) | Cod sursa (job #2847168) | Cod sursa (job #1509948) | Cod sursa (job #233157) | Cod sursa (job #2923038)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
// Given a capacity c, we compute the required tranports number
int transportsNo(int c, vector<int> &volum) {
int sumSerie = 0, noSerie = 1;
for (auto vol : volum) {
if (sumSerie + vol > c) {
noSerie++;
sumSerie = vol;
} else {
sumSerie += vol;
}
}
return noSerie;
}
// use reference for vector
void binarySearch(int left, int right, int K, int &sol, vector<int> &volum) {
if (left <= right) {
int mid = left + (right - left) / 2;
if (transportsNo(mid, volum) > K) {
binarySearch(mid + 1, right, K, sol, volum);
} else {
sol = mid;
binarySearch(left, mid - 1, K, sol, volum);
}
}
}
int main() {
int N, K;
vector<int> volum;
fin >> N >> K;
int ma = 0, sum = 0;
for (int i = 0; i < N; i++) {
int vol;
fin >> vol;
volum.push_back(vol);
sum += volum[i];
if (ma < volum[i]) {
ma = volum[i];
}
}
int sol = -1;
binarySearch(ma, sum, K, sol, volum);
fout << sol;
}