Cod sursa(job #2081816)

Utilizator moltComan Calin molt Data 5 decembrie 2017 10:52:14
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("transport.in");
ofstream out("transport.out");

int n,k,v[16001],mx;

int fct(int lim)
{
    int i = 1,s = 0,cnt = 0;
    while( i <= n )
    {
        while( s <= lim && i <= n )
        {
            s = s + v[i];
            ++i;
        }
        ++cnt;
        if(s > lim)
            --i;
        s = 0;
    }
    if(cnt <= k)
        return 1;
    return 0;

    //for (int i = 1;i <= n;++i)
}

int caut_bin(int s,int mx)
{
    int pas = 1 << 13,r = mx-1;
    while (pas != 0)
    {
        if (fct(r + pas) == 0 && r + pas <= s)
        {
            r += pas;
        }
        pas >>= 1;
    }
    ++r;
    return r;
}

int main()
{
    in>>n>>k;
    int s = 0;
    mx = -1;
    for (int i = 1; i <= n; ++i)
    {
        in>>v[i];
        if (v[i] > mx)
            mx = v[i];
        s += v[i];
    }
    // int st = mx;
    //int dr = s;
    //int mij = ( dr + st ) / 2;
    /*while( st <= dr )
    {
        if( fct(mij) == 1 )
        {
            if( mn > mij )
                mn = mij;
            dr = mij - 1;
        }
        else
            st = mij + 1;
        mij = (dr + st) / 2;
        out<<mn;*/
    out<<caut_bin(s,mx);
    return 0;
}