Cod sursa(job #2892036)

Utilizator Daria09Florea Daria Daria09 Data 20 aprilie 2022 15:53:33
Problema Transport Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("transport.in");
ofstream g("transport.out");
int n,k,ans;
vector<int> volumes;

bool check_volume(int volume)
{
    int transports = 0;
    int current_volume = 0;

    for(int i = 0; i < n; ++i)
        if(current_volume + volumes[i] > volume)
        {
            ++transports;
            current_volume=volumes[i];
        }
        else
        current_volume += volumes[i];

    ++transports;

    if(transports > k)
    return false;

    return true;
}

void solve()
{
    int mid, left, right;

    left = 0;
    right = 16005;

    while(left < right)
    {
        mid = (left + right) / 2;

        if(check_volume(mid) == true)
            {
                ans = mid;
                right = mid - 1;
            }
            else
            left = mid + 1;
    }
}

int main()
{
    f>>n>>k;

    for(int i = 0; i < n; ++i)
    {
        int x;
        f>>x;
        volumes.push_back(x);
    }

    solve();

    g<<ans;
    return 0;
}