Cod sursa(job #1799711)

Utilizator stefanmereutaStefan Mereuta stefanmereuta Data 6 noiembrie 2016 17:59:00
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>

using namespace std;

int ver(int v[], int N, int K, int cap) {
    int drumuri = 0, sum;

    for (int i = 0; i < N;) {
        sum = 0;

        while (sum <= cap && i < N) {
            sum += v[i++];

            if (sum > cap)
                i--;
        }

        drumuri++;
    }

    if (drumuri <= K)
        return 1;
    else
        return 0;
}

int cautbin(int v[], int N, int K, int st, int dr) {
    if (st == dr) {
        return st;
    }

    int mid = (st + dr) / 2;

    if (ver(v, N, K, mid) == 1) {
        return cautbin(v, N, K, st, mid - 1);
    } else {
        return cautbin(v, N, K, mid + 1, dr);
    }
}

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

    int N, K, v[16000], maxim = 0, sum = 0;

    fin >> N >> K;

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

        if (v[i] > maxim) {
            maxim = v[i];
        }

        sum += v[i];
    }

    fout << cautbin(v, N, K, maxim, sum);

    fin.close();
    fout.close();

    return 0;
}