Cod sursa(job #2807645)

Utilizator nicuhasCemartan Nicolae nicuhas Data 24 noiembrie 2021 00:09:45
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>

using namespace std;

ifstream cin ("transport.in");
ofstream cout ("transport.out");
const int MAX = 1e5 + 14;
int v [MAX];
int main()
{
    int n,k, suma = 0;
    cin >> n >> k;
    for (int i =1; i<= n; ++i)
    {
        cin >> v[i];
        suma += v [i];
    }
    int st = 1;
    int dr = suma;
    int sol = suma;
    while (st <= dr)
    {
        int mid = (st+dr) / 2;
        int tr = 1;
        int p = 1;
        int s = 0;
        while (p <= n and tr <= k)
        {
            if (v[p] > mid)
            {
                tr = k + 1;
                break;
            }
            if (s + v [p] <= mid)
                s += v [p ++];
            else
            {
                tr += 1;
                s = v [p ++];
            }
        }
        if (tr <= k)
        {
            sol = mid;
            dr = mid - 1;
        }
        else
        {
            st = mid + 1;
        }
    }
    cout << sol << '\n';
    return 0;
}