Cod sursa(job #1523596)

Utilizator sulzandreiandrei sulzandrei Data 12 noiembrie 2015 21:24:41
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
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)
{
    if( st<=dr)
    {
        int mij = (st+dr)/2;
        int n_o_t = noftt(mij);
        if (n_o_t == k)
        {
            if( mij >= maxi)
            {

                if( mij-1 >= maxi && noftt(mij-1) >k)
                    return mij;
                else
                    return BS(st,mij-1);
            }
        }
        if( n_o_t < k )
            return BS(st,mij-1);
        if( n_o_t > k)
            return BS(mij+1,dr);
    }
}
 int main()
{
    in >> n >> k;
    for(int i = 0 ; i < n ; i++)
    {
        in >>v[i];
        if (v[i]> maxi)
            maxi = v[i];
    }
    int result = BS(maxi*n/k,n*16000);
    out<< result;
    return 0;
}