Cod sursa(job #3156977)

Utilizator Codrin_RobuRobu Codrin Codrin_Robu Data 13 octombrie 2023 22:35:32
Problema Transport Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <iostream>
#include <fstream>

using namespace std;

const int MAX_N = 16005;

int N, K;
int v[MAX_N];

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

    fin >> N >> K;
    int st = 0, dr = 0;

    for (int i = 0; i < N; i++) {
        fin >> v[i];
        dr += v[i];
        if (v[i] > st) {
            st = v[i];
        }
    }

    while (st < dr) {
        int mij = (st + dr) / 2;
        int tc = 0;
        int cc = 0;

        for (int i = 0; i < N; i++) {
            if (v[i] > mij) {
                tc = K + 1;
                break;
            }

            if (cc + v[i] <= mij) {
                cc += v[i];
            } else {
                tc++;
                cc = v[i];
            }
        }

        if (tc <= K) {
            dr = mij;
        } else {
            st = mij + 1;
        }
    }

    fout << st << endl;

    return 0;
}