Cod sursa(job #1046065)

Utilizator morlockRadu Tatomir morlock Data 2 decembrie 2013 17:14:39
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <iostream>
#include <fstream>
#define nmax 16005
using namespace std;

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

int N, K, v[nmax], i, step, sumaVol=0, maxVol=0;

int drum(int vol)
{
    int nr = 1, s = 0;
    for ( int i=1; i<=N; ++i )
        if ( s + v[i] <= vol ) s += v[i];
        else
        {
            s = v[i];
            nr++;
        }

    return nr;
}

int main()
{
    in >> N >> K;
    for ( int i=1; i<=N; ++i )
        {
            in >> v[i];
            sumaVol += v[i];
            maxVol = max(v[i], maxVol);
        }

    for ( step = 1; step < sumaVol; step <<= 1 );
    for ( i = step; step; step >>= 1 )
        if ( i - step >= maxVol && drum(i-step) <= K)
            i -= step;


    out << i;
}