Cod sursa(job #3258880)

Utilizator siluanBaboi Siluan siluan Data 23 noiembrie 2024 23:19:29
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

int n, k, i, st, dr, mij, sum, drumuri, v[16001];

int main() {
    f >> n >> k;
    for (i = 1; i <= n; i++) {
        f >> v[i];
    }

    st = v[1];
    dr = 0;

    for (i = 1; i <= n; i++) {
        dr += v[i];
        if (st < v[i])
            st = v[i];
    }

    // st = volumul maxim al unei saltele (volumul minim al masinii)
    // dr = suma tuturor volumelor (volumul maxim al masinii)

    while (st <= dr) {
        mij = (st + dr) / 2;
        sum = 0;
        drumuri = 1;

        for (i = 1; i <= n; i++) {
            if (sum + v[i] > mij) {
                drumuri++;
                sum = v[i];
            } else {
                sum += v[i];
            }
        }

        if (drumuri <= k) {
            dr = mij - 1;
        } else {
            st = mij + 1;
        }
    }

    g << st;
    return 0;
}