Pagini recente » Istoria paginii runda/acazutcurentul | Istoria paginii utilizator/tzoky07 | Cod sursa (job #441591) | Cod sursa (job #1593019) | Cod sursa (job #1041566)
#include <fstream>
#include <vector>
std::ifstream in("transport.in");
std::ofstream out("transport.out");
bool capacitateValida(std::vector<size_t> &v, size_t c, size_t k) {
size_t pas = v.size() - 1;
size_t pos = 0;
size_t offset = 0;
size_t t = 0;
while (t <= k && pos != v.size() - 1) {
while ((pas = (pas / 2)))
if (pas + pos < v.size() && c >= v[pas + pos] - offset)
pos += pas;
if (c < v[pos] - offset) return false;
offset = v[pos++];
++t;
pas = v.size() - pos - 1;
}
if (t <= k) return true;
return false;
}
int main()
{
size_t n, k, aux = 0, pas, minC;
in>>n>>k;
std::vector<size_t> sP;
sP.reserve(n);
while(in>>n) {
aux += n;
sP.push_back(aux);
}
pas = sP.back() * 2;
minC = 0;
while ((pas = (pas / 2)))
if (pas + minC <= sP.back() && !capacitateValida(sP, pas, k))
minC += pas;
out<<minC;
}