Cod sursa(job #1553972)

Utilizator CTI_KnightCir Constantin CTI_Knight Data 20 decembrie 2015 19:19:29
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
# include <fstream>
# include <limits>

using namespace std;

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

int n, a[16005], k;
bool verificare ( int c )
{
    int p, s, i;
    p = 1;
    s = 0;
    for ( i = 1; i <= n; i ++ )
    {
        s = s + a[i];
        if ( s > c )
        {
            s = a[i];
            p ++;
        }
    }

    return ( p <= k );
}

int main ()
{
    int left, right, i, mid, ok;

    cin >> n >> k;

    left = -2000000000;
    right = 0;

    for ( i = 1; i <= n; i ++ )
    {
        cin >> a[i];
        left = max ( left, a[i] );
        right = right + a[i];
    }

    while ( left <= right )
    {
        mid = ( left + right ) / 2;
        ok = verificare ( mid );
        if ( ok )
            right = mid - 1;
        else
            left = mid + 1;
    }

    cout << left;

    return 0;
}