Cod sursa(job #1565245)

Utilizator gedicaAlpaca Gedit gedica Data 10 ianuarie 2016 16:00:49
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>

using namespace std;

const int NMAX= 16000;

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

int N, K;
int v[NMAX+1];
int sol_max=0,sol_min=0;

bool verif( int x )
{
    int sol= 1, aux= 0;

    for( int i= 1; i<=N; ++i )
    {
        if( aux+v[i]<=x )
        {
            aux+= v[i];
        }
        else
        {
            ++sol;
            aux= v[i];
        }
    }

    return sol<=K;
}

int main( )
{
    in >> N >> K;

    for( int i= 1; i<=N; ++i )
    {
        in >> v[i];

        if( v[i]>sol_min )
        {
            sol_min= v[i];
        }

        sol_max+= v[i];
    }
    int step, sol;
    for( step= 1; step<=sol_max; step*=2 );

    for ( sol= sol_max; step>0; step/=2 )
    {
        if ( sol-step>=sol_min && verif(sol-step)==1 )
        {
            sol-= step;
        }
    }

    out << sol << '\n';
    return 0;
}