Cod sursa(job #3270081)

Utilizator tudorbuhniaTudor Buhnia tudorbuhnia Data 21 ianuarie 2025 22:32:46
Problema Transport Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#include <algorithm>

using namespace std;

int v[16005], v2[16005];

int test(int n, int k, int c)
{
    int sum = 0, cnt = 1;
    for(int i=1;i<=n;i++)
    {
        if(v[i] > c)
            return 999999;

        if(sum+v[i] > c)
        {
            cnt++;
            sum=v[i];
        }
        else
        {
            sum+=v[i];
        }
    }
    return cnt;
}

int nrtr(int n,int k, int c) {

    int nr = 1, cap = c;
    for(int i = 1 ; i <= n ; ++ i) {
        if(cap >= v[i]) {
            cap -= v[i];
        }
        else {
            nr++;
            cap = c - v[i];
        }
    }
    return nr;
}

int main()
{
    ifstream cin("transport.in");
    ofstream cout("transport.out");
    int n, k, mx=0, mx2 = 0;
    cin >> n >> k;
    for(int i=1;i<=n;i++)
    {
        cin >> v[i];
        mx = max(mx, v[i]);
        mx2 += v[i];
    }

    int st=mx, dr=mx2, mij, res=9999999;
    while(st<=dr)
    {
        mij = (st+dr)/2;
        if(nrtr(n,k,mij)<=k)
        {
            res = min(mij,res);
            dr=mij - 1;
        }
        else
        {
            st=mij + 1;
        }
    }
    cout << res;
    return 0;
}