Cod sursa(job #2831896)

Utilizator antonio_sefu_tauLaslau Antonio antonio_sefu_tau Data 12 ianuarie 2022 13:48:23
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb

#include <bits/stdc++.h>
#define ll long long

using namespace std;

const int dim = 16005;
ll a[dim], n, k, s, maxx;

ll HowMany(ll cap)
{
    ll trans = 1, s = 0;
    for(ll i = 1; i <= n; i++)
    {
        if(s + a[i] <= cap)
            s += a[i];
        else
            trans++, s = a[i];
    }
    return trans;
}

ll cautare_binara(ll left, ll right)
{
    ll sol = 0;
    while(left <= right)
    {
        ll mid = (left + right) / 2;
        if(HowMany(mid) <= k)
        {
            sol = mid;
            right = mid - 1;
        }
        else
            left = mid + 1;
    }
    return sol;
}

int main()
{
    ifstream f("transport.in");
    ofstream g("transport.out");
    f >> n >> k;
    for(ll i = 1; i <= n; i++)
    {
        f >> a[i];
        if(a[i] > maxx)
            maxx = a[i];
        s += a[i];
    }
    g << cautare_binara(maxx, s);
    return 0;
}