Cod sursa(job #2071244)

Utilizator Andrei17Andrei Pascu Andrei17 Data 20 noiembrie 2017 15:08:28
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>
#define NMAX 16000
#define LIM 27

using namespace std;

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

int n, k, maxim;
int v[NMAX], suma[NMAX];

bool nrdrumuri(int c) {
    int nr = 1, poz = 0;

    for (int i = 1; i <= n; i++) {
        if (suma[i] - suma[poz] > c) {
            poz = --i;
            nr++;
        }
    }
    //out << nr << '\n';

    return (nr <= k);
}

void cautbin() {
    int pas = 1 << LIM, r = maxim - 1;

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

    out << r + 1;
}

int main()
{
    in >> n >> k;
    for (int i = 1; i <= n; i++) {
        in >> v[i];
        suma[i] = suma[i - 1] + v[i];
        if (maxim < v[i]) {
            maxim = v[i];
        }
    }
    //out << nrdrumuri(8) << '\n';
    cautbin();
    return 0;
}