Cod sursa(job #2151124)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 4 martie 2018 09:34:18
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <fstream>

using namespace std;

ifstream fin("transport.in");
ofstream fout("transport.out");

int sum[16005], maxx = 0, n, k;

bool nrdrumuri(int x) {
    int nr = 1, j = 0;

    for (int i = 1; i <= n; i++) {
        if (sum[i] - sum[j] > x) {
            j = --i;
            nr++;
        }
    }

    return (nr > k);
}

void cautbinar() {
    int r = maxx - 1, pas = 1 << 27; ///pas = 268435456 = 16000 ^ 2

    while (pas != 0) {
        if (nrdrumuri(r + pas))
            r += pas;
        pas >>= 1; /// pas = pas / 2
    }

    fout << r + 1;
}

int main()
{
    fin >> n >> k;

    for(int i = 1; i <= n; ++i){
        int x;
        fin >> x;

        maxx = max(maxx , x);
        sum[i] = sum[i - 1] + x;
    }

    cautbinar();
    return 0;
}