Cod sursa(job #2919384)

Utilizator victor_gabrielVictor Tene victor_gabriel Data 17 august 2022 11:30:01
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
/*
7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3  4  5  6  7  8  9 10 11 12 13 14
*/

#include <fstream>

using namespace std;

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

const int DIM = 16001;

int n, k, maxim = 0, sum = 0;
int v[DIM];

int check(int value) {
    int currentVolume = 0, numberOfTransports = 0;
    for (int i = 1; i <= n; i++) {
        if (currentVolume + v[i] <= value)
            currentVolume += v[i];
        else {
            currentVolume = v[i];
            numberOfTransports++;
        }
    }
    if (currentVolume > 0)
        numberOfTransports++;

    if (numberOfTransports > k)
        return 1;
    if (numberOfTransports < k)
        return -1;
    return 0;
}

int main() {
    fin >> n >> k;
    for (int i = 1; i <= n; i++) {
        fin >> v[i];
        maxim = max(maxim, v[i]);
        sum += v[i];
    }

    int left = maxim, right = sum;
    while (left <= right) {
        int middle = (left + right) / 2;
        if (check(middle) <= 0)
            right = middle - 1;
        else
            left = middle + 1;
    }

    fout << left;

    return 0;
}