Cod sursa(job #2850392)

Utilizator andreitricaAndrei Trica andreitrica Data 16 februarie 2022 18:35:42
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
using namespace std;

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

const int NMAX = 16000;
int v[NMAX + 5], n, k;

bool ok(int c)
{
    int s, i, tr;
    tr = s = 0;
    for (int i = 1; i <= n; ++i)
    {
        if (v[i] > c)
            return 0;
        s = s + v[i];
        if (s > c)
            tr++, s = v[i];
    }
    if (s <= c)
        tr++;
    return tr <= k;
}

int bs(int st, int dr)
{
    int med, last = -1;
    while (st <= dr){
        med = (st + dr) / 2;
        if (ok(med))
        {
            last = med;
            dr = med - 1;
        }
        else
            st = med + 1;
    }
    return last;
}

int main()
{
    int i, vmax;
    fin >> n >> k;
    vmax = 0;
    for (int i = 1; i <= n; ++i)
    {
        fin >> v[i];
        vmax = vmax + v[i];
    }
    fout << bs(1, vmax);
    fin.close(), fout.close();

    return 0;
}