Cod sursa(job #2178709)

Utilizator danyvsDan Castan danyvs Data 19 martie 2018 17:58:30
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>

using namespace std;

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

const int NMAX = 16005;

int vec[NMAX], n, k;

int main() {
    fin >> n >> k;
    for (int i = 1; i <= n; ++ i)
        fin >> vec[i];
    fin.close();

    int ans = NMAX;
    // se cauta binar valoarea ceruta
    int lo = 1, hi = NMAX;
    while (lo <= hi) {
        int mid = lo + (hi - lo) / 2;

        int i = 1, cnt = 0;
        while (i <= n) {
            ++ cnt; // numarul de transporuti
            int qty = mid; // cantitatea disponibila
            while (i <= n && vec[i] <= qty) {
                // se umple camionul curent
                qty -= vec[i ++];
            }
            if (cnt > k) {
                /* este posibil ca capacitatea sa fie atat de mica, incat o saltea sa nu poata
                incapea, programul ciclind */
                break;
            }
        }

        if (cnt <= k) {
            if (mid < ans)
                ans = mid;
            hi = mid - 1;
        }
        else
            lo = mid + 1;
    }

    fout << ans << "\n";

    fout.close();

    return 0;
}