Cod sursa(job #2143411)

Utilizator Andrei17Andrei Pascu Andrei17 Data 25 februarie 2018 21:54:14
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <fstream>

using namespace std;

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

const int N = 16001;

int n, k, m, sum[N];

int drumuri(int x) {
    int i = 1, j = 0, nr = 0;

    while (i <= n && j <= n) {
        while (i <= n && sum[i] - sum[j] <= x) i++;
        nr++;
        j = i - 1;
    }

    return nr;
}

void cautbin() {
    int r = m - 1, pas = 1 << 30;

    while (pas != 0) {
        if (r + pas <= sum[n] && drumuri(r + pas) > k) {
            r += pas;
        }
        pas >>= 1;
    }

    out << r + 1;
    out.close();
}

int main()
{
    in >> n >> k;
    for (int i = 1; i <= n; i++) {
        in >> sum[i];
        m = max(m, sum[i]);
        sum[i] += sum[i - 1];
    }
    cautbin();
}