Cod sursa(job #1147540)

Utilizator andreiagAndrei Galusca andreiag Data 19 martie 2014 22:17:08
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <fstream>

using namespace std;
const int Nmax = 16005;

int N, K, A[Nmax];

inline bool fun(int Cap)
{
    int current = 0, cnt = 1;
    for (int i = 0; i < N; i++)
        if (current + A[i] <= Cap)
            current += A[i];
        else { current = A[i]; cnt++; }
    return cnt <= K;
}

int binary(int low, int high, int val)
{
    int mid;
    bool ok;
    while (low < high)
    {
        mid = low + (high - low) / 2;
        ok = fun(mid);
        if (ok) high = mid;
        else low = mid+1;
    }
    return low;
}

int main()
{
    ifstream f ("transport.in");
    ofstream g ("transport.out");

    f >> N >> K;
    int low = -1, high = 0;
    for (int i = 0; i < N; i++) {
        f >> A[i];
        high += A[i];
        low = A[i] > low ? A[i] : low;
    }

    g << binary(low, high, K) << '\n';

    return 0;
}