Cod sursa(job #3318198)

Utilizator winemomComan Erin winemom Data 27 octombrie 2025 14:54:37
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
typedef long long ll;
const int nMax = 16e3;
ll n, k, v[nMax + 5];

/**6 3
7
3
2
3
1
4*/
bool incape(ll capacitate)
{
    ll nr_drumuri = 1;
    ll catAvem = 0;
    for(int i=1; i<=n; i++)
    {
        if(catAvem + v[i] <= capacitate)
        {
            catAvem += v[i];
        }
        else
        {
            nr_drumuri++;
            catAvem = v[i];
            if(nr_drumuri > k)
                return false;
        }
    }
    return true;
}

ll cautamCapacitate(ll st, ll dr)
{
    ll res = -1;
    while(st <= dr)
    {
        ll mid = st + (dr-st)/2;
        if(incape(mid))
        {
            res = mid;
            dr = mid -1;
        }
        else
            st = mid + 1;
    }
    return res;
}
int main()
{
    ll maximDinSir = LONG_LONG_MIN;
    ll suma = 0;
    f >> n >> k;
    for(int i=1; i<=n; i++)
        f >> v[i],
        maximDinSir = max(maximDinSir, v[i]),
        suma += v[i];
    g << cautamCapacitate(maximDinSir, suma);

}