Cod sursa(job #1838039)

Utilizator BLz0rDospra Cristian BLz0r Data 30 decembrie 2016 21:28:44
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
using namespace std;

#define NMAX 17002

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

int N, K;
int v[NMAX];

//verificam daca ne ajung camioane de volum x pentru a cara saltelele
bool verif(int x) {

    int trans = 0, i = 0;

    while (trans <= K && i <= N) {
        int volum = 0;

        while (volum + v[i] <= x) {
            volum += v[i];
            i++;
        }

        trans++;
    }

    if (trans <= K)
        return true;

    return false;
}

// cautam binar numarul minim de transporturi
int Bsearch(int st, int dr) {

    int sol;
    while (st <= dr) {

        int mid = st + ((dr - st) >> 1);

        if (!verif(mid))
            st = mid + 1;
        else{
            dr = mid - 1;
            sol = mid;
        }
    }

    return sol;
}

int main() {

    fin >> N >> K;

    int st = -1, dr = 0;
    for (int i = 1; i <= N; ++i) {

        fin >> v[i];

        dr += v[i];

        if (v[i] > st)
            st = v[i];
    }

    fout << Bsearch(st, dr);

    return 0;
}