Cod sursa(job #1523567)

Utilizator sulzandreiandrei sulzandrei Data 12 noiembrie 2015 20:50:41
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
long long int v[16003],n,k,maxi = 0;
long long int noftt(long long int c)
{
    long long 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 k-noft;
}
int BS2(int st, int dr)
{
    if(st <= dr)
    {
        int mij = (st+dr)/2;
        if( noftt(mij)>=0)
            BS2(st,mij-1);
        else
            BS2(mij+1,dr);
    }
}
long long int BS(long long int st , long long int dr)
{
    if( st<=dr)
    {
        long long int mij = (st+dr)/2;
        if ( maxi <= mij)
        {
            long long int n_o_t = noftt(mij);
            if (n_o_t == 0)
                return BS2(maxi,mij);
            else
                if( n_o_t> 0)
                    return BS(st,mij-1);
                else
                    return BS(mij+1,dr);
        }
        else
            return BS(mij+1,dr);
    }
}
 int main()
{
    in >> n >> k;
    for(long long int i = 0 ; i < n ; i++)
    {
        in >>v[i];
        if (v[i]> maxi)
            maxi = v[i];
    }
    long long int result = BS(maxi,n*16000);
    //result = BS2(maxi, maxi * (n+1)/k);
    out<< result;
    return 0;
}