Pagini recente » Cod sursa (job #1516349) | Cod sursa (job #170828) | Cod sursa (job #1361106) | Cod sursa (job #1184315) | Cod sursa (job #3322466)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main() {
ifstream fin("transport.in");
ofstream fout("transport.out");
int N, K;
fin >> N >> K;
int saltele[16001]; // N ≤ 16000 conform cerinței
for (int i = 0; i < N; i++)
fin >> saltele[i];
// Calculăm limitele pentru căutarea binară
int st = saltele[0];
int dr = 0;
for (int i = 0; i < N; i++) {
if (saltele[i] > st) st = saltele[i];
dr += saltele[i];
}
int raspuns = dr;
// Căutare binară
while (st <= dr) {
int mid = (st + dr) / 2;
int curse = 1;
int volumCurent = 0;
// Simulăm transporturile
for (int i = 0; i < N; i++) {
if (volumCurent + saltele[i] <= mid)
volumCurent += saltele[i];
else {
curse++;
volumCurent = saltele[i];
}
}
if (curse <= K) {
raspuns = mid;
dr = mid - 1;
} else {
st = mid + 1;
}
}
fout << raspuns << "\n";
return 0;
}