Pagini recente » Cod sursa (job #253432) | Cod sursa (job #2445138) | Cod sursa (job #1374652) | Cod sursa (job #1243674) | Cod sursa (job #1042057)
#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, pos = 0, offset = 0, t = 0, mp;
for (mp = 1; mp < v.size(); mp <<= 1);
while (t <= k && offset < v.back()) {
pas = mp;
for (; pas; pas >>= 1)
if (pos + pas < v.size() && c >= v[pas + pos] - offset)
pos += pas;
if (c < v[pos] - offset) return false;
offset = v[pos++];
++t;
}
if (t <= k) return true;
return false;
}
int main()
{
size_t n, k, aux = 0, pas, pos, minC = 0;
in>>n>>k;
std::vector<size_t> sP;
sP.reserve(n);
while(in>>n) {
aux += n;
sP.push_back(aux);
}
for (pas = 1; pas < sP.back(); pas <<= 1);
for (pos = 0; pas; pas >>= 1)
if (pos + pas <= sP.back())
if (capacitateValida(sP, pos + pas, k))
minC = pos + pas;
else pos += pas;
out<<minC;
}