Pagini recente » Cod sursa (job #1787345) | Cod sursa (job #2895849) | Cod sursa (job #2004337) | Cod sursa (job #2865743) | Cod sursa (job #3179871)
#include <iostream>
#include <fstream>
#include <stdint.h>
const uint32_t MAX_N = 16000;
const uint32_t MAX_C = 256000000;
const uint32_t MAX_C_POW_2 = 134217728;
uint32_t v[MAX_N], n, k, max = 0;
uint32_t GetTransports(uint32_t n, uint32_t c) {
uint32_t sum = 0, nr = 1;
for(uint32_t i = 0; i != n; ++i) {
if(sum + v[i] > c) {
++nr;
sum = v[i];
} else
sum += v[i];
}
return nr;
}
int main() {
std::ifstream fin("transport.in");
std::ofstream fout("transport.out");
fin >> n >> k;
uint32_t max = 0;
for(uint32_t i = 0; i != n; ++i) {
fin >> v[i];
if(v[i] > max)
max = v[i];
}
uint32_t c = MAX_C;
for(uint32_t step = MAX_C_POW_2; step; step >>= 1)
if(c >= max + step && GetTransports(n, c - step) <= k)
c -= step;
fout << c;
fin.close();
fout.close();
return 0;
}