Pagini recente » Cod sursa (job #3142230) | Cod sursa (job #2679609) | Cod sursa (job #1228574) | Cod sursa (job #2494649) | Cod sursa (job #2892027)
#include <iostream>
#include <fstream>
#include <limits.h>
void load (int& middle, int& n, int& path, int array[])
{
path = 0;
int sinc {0}, i {1};
while (i <= n) {
sinc = 0;
while (sinc + array[i] <= middle) {
sinc = sinc + array[i++];
}
path++;
}
}
int main ()
{
// Files
std::ifstream fin;
fin.open("transport.in");
std::ofstream fout;
fout.open("transport.out");
// Variables
int array[(1<<14)];
int n {0}, k {0}, sum {0}, min {INT_MAX}, path {0}, max {0}, middle {0};
// Read
fin >> n >> k;
for (int i = 1; i <= n; ++i) {
fin >> array[i];
sum = sum + array[i];
if (max < array[i]) {
max = array[i];
}
}
array[n+1] = INT_MAX;
while (max < sum) {
middle = (max + sum) / 2;
load (middle, n, path, array);
if (path <= k && min > middle) {
min = middle;
}
if (path <= k && path > 1) {
sum = middle;
} else {
max = middle + 1;
}
}
fout << min;
return 0;
}