Cod sursa(job #1777082)

Utilizator CiurezAndreiCiurez Marius-Andrei CiurezAndrei Data 12 octombrie 2016 01:27:44
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;

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

int N, K, v[16010];


inline bool verif(int middle)
{
    int sum = 0, nr = 0;
    for(int i = 1; i <= N; i ++)
    {
        if(sum > middle)
        {
            nr ++;
            sum = v[i - 1];
        }
        sum += v[i];
    }
    if(sum > middle)
    {
        nr += 2;
    }
    else
    {
        if(sum)
        {
            nr ++;
        }
    }

    return nr <= K;
}

int main()
{
    fin >> N >> K;

    int maxV = 0;

    for(int i = 1; i <= N; i ++)
    {
        fin >> v[i];
        maxV = max(maxV, v[i]);
    }

    int left = maxV;
    int right = 16001 * 16001;

    while(left <= right)
    {
        int middle = (left + right) >> 1;

        if( verif(middle) )
        {
            right = middle - 1;
        }
        else
        {
            left = middle + 1;
        }
    }

    fout << left;

    return 0;
}