Cod sursa(job #1042057)

Utilizator DanielSanduSandu Daniel DanielSandu Data 26 noiembrie 2013 15:41:26
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#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;
}