Cod sursa(job #2361486)

Utilizator abcdefggVinti test abcdefgg Data 2 martie 2019 16:15:57
Problema Transport Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
long long v[16001],n,k,s,m,M,K,i,ok,li,ls,x,Max;;
int main ()
{
    fin >> n >> k;
    s = Max = 0;
    for(i = 1; i <= n; i++)
    {
        fin >> v[i];
        s += v[i];
        if(v[i] > Max)
            Max = v[i];
    }
    li = Max;
    ls = s;
    ok = 0;
    while(li <= ls && ok == 0)
    {
        m = (li+ls)/2;
        M = m;
        K = 1;
        i = 1;
        while(i <= n)
        {
            if(m-v[i] >= 0)
            {
                m -= v[i];
                i++;
            }
            else
            {
                K++;
                m = M;
            }
        }
        if(K == k)
            ok = 1;
        if(K > k)
            li = M+1;
        if(K < k)
            ls = M-1;
    }
    ok = i = 1;
    while(ok)
    {
        x = M-1;
        K = 1;
        while(i <= n)
        {
            if(x-v[i] >= 0)
            {
                x -= v[i];
                i++;
            }
            else
            {
                K++;
                x = M-1;
            }
        }
        if(K == k)
            M--;
        else
            ok = 0;
    }
    fout << M;
    return 0;
}