Cod sursa(job #2807711)

Utilizator tmxmatTudor Matasaru Mihai tmxmat Data 24 noiembrie 2021 09:37:40
Problema Transport Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>

using namespace std;

ifstream cin("transport.in");
ofstream cout("transport.out");

int v[16001];

int main()
{
    long long n, k;
    cin >> n >> k;
    long long mx = 0, mn = -1;
    for (int i = 1; i <= n; i ++)
    {
        cin >> v[i];
        if (mn < v[i])
        {
            mn = v[i];
        }
        mx += v[i];
    }
    long long st = mn, dr = mx, mij, posib = 2000000000;
    long long s, t;
    while (st <= dr)
    {
        mij = (st + dr) / 2;
        s = 0;
        t = 0;
        for (int i = 1; i <= n; i ++)
        {
            s += v[i];
            if (s + v[i + 1] > mij)
            {
                t ++;
                s = 0;
            }
            else
            {
                if (i == n)
                {
                    t ++;
                }
            }
        }
        if (t > k)
        {
            st = mij + 1;
        }
        else if (t < k)
        {
            if (mij < posib)
            {
                posib = mij;
            }
            dr = mij - 1;
        }
        else if (t == k)
        {
            posib = mij;
            dr = mij - 1;
        }
    }
    cout << mij;
    return 0;
}