Cod sursa(job #2890762)

Utilizator mihnea.tTudor Mihnea mihnea.t Data 16 aprilie 2022 15:09:42
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <bits/stdc++.h>

#define INF ((int)1e9)

using namespace std;

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

int n, k;
vector<int> v;

void read_input() {
    fin >> n >> k;
    for (int i = 0; i < n; ++i) {
        int a;
        fin >> a;
        v.push_back(a);
    }
}

int get_trips(int truck_size) {
    int trips = 0;
    int curr_size = 0;
    for (int i = 0; i < n; ++i) {
        if (v[i] > truck_size) {
            return -1;
        }

        curr_size += v[i];
        if (curr_size > truck_size) {
            // cout << "HERE -- " << i << ": " << v[i] << "\n";
            ++trips;
            curr_size = v[i];
        }
    }

    return ++trips;
}

int main(void) {
    read_input();
    
    int left = 0;
    int right = INF;

    int min_size = INF;

    while (left <= right) {
        int mid = left + (right - left) / 2;
        int trips = get_trips(mid);
        if (trips == -1) {
            left = mid + 1;
        } else if (k < trips) {
            left = mid + 1;
        } else {
            min_size = min(min_size, mid);
            right = mid - 1;
        }
    }

    fout << min_size << "\n";

    // for (int i = 0; i <= 15; ++i) {
    //     cout << i << ": " << get_trips(i) << "\n";
    // }

    return 0;
}