Cod sursa(job #1121577)

Utilizator UgleaEduFMI - Edward UgleaEdu Data 25 februarie 2014 13:16:21
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;
long int  maxim = 0, n;

long int NrTran( long int  c, vector<long int> &v )
{
    long int clona ;
    size_t i = 0, nr = 0;
    while ( i < n )
    {

        clona = c;

        while ( clona - v[ i ] >= 0 )

            clona -= v[ i++ ];
        nr ++;
    }

    return nr;

}
long int Bsearch( long int st, long int dr, vector <long int> &v, long int k )
{
    long int mid, NrT;
    while ( st < dr )
    {

        mid = st + ( dr - st ) / 2;
        NrT = NrTran ( mid, v);
        if ( NrT  == k )

            if ( NrTran ( mid - 1, v ) == k + 1 )

                return mid;
        if ( NrT <= k )

            dr = mid -1 ;

        if ( NrT > k )

            st = mid + 1;

    }

    cout << '\a';


}

int main()
{
    ifstream f("transport.in");
    long int k, aux;


    vector <long int> v;

    f >> n;
    f >> k;

    for ( size_t i = 0; i < n; i++ )
    {

        f >> aux;
        v.push_back( aux );
        if ( maxim < aux )

            maxim = aux;

    }
    f.close();

    aux = Bsearch( maxim , maxim * v.size(), v, k );

    ofstream g("transport.out");
    g << aux;
    g.close();

    return 0;
}