Cod sursa(job #3142097)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 19 iulie 2023 10:50:21
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>

using namespace std;

const int Nmax = 16005;

int n, k, a[Nmax];

int cate_drumuri(int cap) {
    int nr = 1, volum = 0;
    for(int i = 1; i <= n; i++) {
        if(volum + a[i] <= cap) {
            volum += a[i];
        }
        else {
            nr++;
            volum = a[i];
        }
    }
    return nr;
}

int main() {
    int left = 0, right = 0;
    ifstream fin("transport.in");
    ofstream fout("transport.out");
    fin >> n >> k;
    for(int i = 1; i <= n; i++) {
        fin >> a[i];
        left = max(left, a[i]);
        right += a[i];
    }
    int sol;
    while(left <= right) {
        int mid = (left + right) / 2;
        int nr = cate_drumuri(mid);
        if (nr <= k) { // capacitatea mid e buna, dar cautam una mai buna (mai mica)
            sol = mid;
            right = mid - 1;
        }
        else { // capacitatea mid nu e buna, ne trebuie una mai mare
            left = mid + 1;
        }
    }

    fout << sol << "\n";
    return 0;
}