Cod sursa(job #2891580)

Utilizator moltComan Calin molt Data 19 aprilie 2022 01:37:37
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>
 
using namespace std;
 
#define NMAX 16000

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

int n, k, mx;
int v[NMAX + 1];

 
bool fct(int cap)
{
    int nr = 0, cc = 0;
    for (int i = 1; i <= n; ++i)
    {
        if (v[i] > cc)
        {
            ++nr;
            cc = cap;
        }
        if (v[i] > cc)
            return false;
        if (nr > k)
            return false;
        cc -= v[i];
    }
    return true;
}
 
int caut_bin(int s, int mx)
{
    int pas = 1 << 27, r = mx - 1;

    while (pas != 0) {
        if (fct(r + pas) == 0 && r + pas <= s) {
            r += pas;
        }
        pas >>= 1;
    }
    ++r;
    return r;
}
 
int main()
{
    in >> n >> k;
    int s = 0;
    mx = -1;
    for (int i = 1; i <= n; ++i)
    {
        in >> v[i];
        mx = max(mx, v[i]);
        s += v[i];
    }
    out << caut_bin(s, mx);
    return 0;
}