Cod sursa(job #3262104)

Utilizator vladm98Munteanu Vlad vladm98 Data 8 decembrie 2024 19:02:06
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <bits/stdc++.h>

using namespace std;

int v[20005];

bool checker(int capacitatea, int n, int k) {
    int greutateCurenta = 0;
    int numarTransporturi = 0;

    for (int i = 1; i <= n; ++i) {
        if (greutateCurenta + v[i] <= capacitatea) {
            // daca pot sa adaug la transportul curent pe i, atunci il adaug si merg mai departe
            greutateCurenta += v[i];
        } else {
            // daca nu pot, atunci imi formez tranportul curent si il numar
            numarTransporturi += 1;
            // resetez greutatea curenta
            greutateCurenta = 0;
            // scad i ul cu 1 ca impreuna cu ++i de la for, sa ajung iar inapoi la elementul curent
            i -= 1;
        }

        if (numarTransporturi > k) {
            return false;
        }
    }
    numarTransporturi += 1;
    if (numarTransporturi > k) {
        return false;
    } else {
        return true;
    }
}

int main()
{
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);
    int n, k;
    cin >> n >> k;

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

    int left = 1, right = 1000000000;

    while (left < right) {
        int middle = (left + right) / 2;

        if (checker(middle, n, k)) {
            right = middle;
        } else {
            left = middle + 1;
        }
    }

    cout << left;
    return 0;
}