Cod sursa(job #3325086)

Utilizator adimiclaus15Miclaus Adrian Stefan adimiclaus15 Data 24 noiembrie 2025 18:04:20
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <bits/stdc++.h>
using namespace std;

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

int N;
int K;
vector<int> v;

bool ok(long long C)
{
    int curse = 1;
    long long s = 0;

    for(int i = 0; i < N; i++)
    {
        if(v[i] > C)
        {
            return false;
        }

        if(s + v[i] <= C)
        {
            s += v[i];
        }
        else
        {
            curse++;
            s = v[i];
            if(curse > K)
            {
                return false;
            }
        }
    }

    return true;
}

int main()
{
    f >> N >> K;

    v.assign(N, 0);

    long long sum = 0;
    int mx = 0;

    for(int i = 0; i < N; i++)
    {
        f >> v[i];
        sum += v[i];
        if(v[i] > mx)
        {
            mx = v[i];
        }
    }

    long long st = mx;
    long long dr = sum;
    long long ans = sum;

    while(st <= dr)
    {
        long long mid = (st + dr) / 2;

        if(ok(mid))
        {
            ans = mid;
            dr = mid - 1;
        }
        else
        {
            st = mid + 1;
        }
    }

    g << ans;
}