Cod sursa(job #2668228)

Utilizator BackBarrelDobrisan Rares Florin BackBarrel Data 4 noiembrie 2020 17:46:45
Problema Transport Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <iostream>
#include <fstream>
using namespace std;
int v[16003],n,k,maxi = 0;
int noftt(int c)
{
    int i = 0, cur = 0, noft = 0;
    while( i < n)
    {
        if (cur+v[i] <=  c)
            cur +=v[i];
        else
        {
            cur = v[i];
            noft++;
        }
        i++;
    }
    if( cur!=0)
        noft++;
    return noft;
}
int BS(int st , int dr)
{
    while( st<=dr)
    {
        int mij = (st+dr)/2;
        int n_o_t = noftt(mij);
        if (n_o_t == k)
        {
            if( noftt(mij-1) >k)
                return mij;
            else
                dr = mij-1;
        }
        if( n_o_t < k )
            dr = mij-1;
        if( n_o_t > k)
            st = mij+1;
    }
}
 int main()
{
    cin >> n >> k;
    for(int i = 0 ; i < n ; i++)
    {
        cin >>v[i];
        if (v[i]> maxi)
            maxi = v[i];
    }
    int result = BS(maxi,n*16000);
    cout<< result;
    return 0;
}