Cod sursa(job #2971454)

Utilizator thomasppThomas thomaspp Data 27 ianuarie 2023 13:45:50
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
#define NrMax 1e9
int n, k, x, sumc, A[16005], sol, st, dr, m, Max;
bool solutie(int vol)
{
    int sumc, drum;
    sumc = drum = 0;
    for(int i = 1; i <= n; i ++)
    {
        if(sumc + A[i] <= vol)
        {
            sumc += A[i];
        }
        else
        {
            drum ++;
            sumc = A[i];
        }
    }
    if(sumc > 0)drum ++;

    if(drum <= k)return true;
    return false;
}
int main()
{
    in >> n >> k;
    for(int i = 1; i <= n; i ++)
    {
        in >> A[i];
        Max = max(A[i], Max);
    }

    st = Max; dr = NrMax;
    while(st <= dr)
    {
        m = (st + dr) / 2;
        if(solutie(m))
        {
            dr = m - 1;
            sol = m;
        }
        else st = m + 1;
    }

    out << sol;
    return 0;
}