Cod sursa(job #1529179)

Utilizator Ionut228Ionut Calofir Ionut228 Data 20 noiembrie 2015 16:23:30
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>

using namespace std;

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

int N, K;
int sol;
int sp[16005];

int possible(int C)
{
    int lastPos = 0, now;
    for (int i = 1; i <= K; ++i)
    {
        int lt = lastPos, rt = N + 1;

        while (rt - lt > 1)
        {
            int mid = (lt + rt) / 2;

            if (sp[mid] - sp[lastPos] <= C)
                lt = mid;
            else
                rt = mid;
        }

        lastPos = lt;
        now = lt;
        if (now == N)
            return 1;
    }

    return 0;
}

void cb_C()
{
    int lt = 0, rt = 16000 * 16000 + 1;

    while (rt - lt > 1)
    {
        int mid = (lt + rt) / 2;

        if (possible(mid))
        {
            sol = mid;
            rt = mid;
        }
        else
            lt = mid;
    }
}

int main()
{
    fin >> N >> K;
    for (int i = 1, x; i <= N; ++i)
    {
        fin >> x;
        sp[i] = x + sp[i - 1];
    }

    cb_C();

    fout << sol << '\n';

    fin.close();
    fout.close();
    return 0;
}