Cod sursa(job #2157497)

Utilizator Alex_AeleneiAlex Aelenei Ioan Alex_Aelenei Data 9 martie 2018 17:47:23
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <cstdio>

using namespace std;
int v [ 16005 ] ;
int transport ( int x, int n )
{
    int c = 1, s = 0, i ;
    for ( i = 1 ; i <= n ; i ++ )
    {
        if ( ( v [ i ] + s ) <= x )
            s = s + v [ i ] ;
        else
        {
            ++ c ;
            s = v [ i ] ;
        }
    }
    return c ;
}
int main()
{
    int n, k, st, dr, i, tr, last, med ;
    freopen ( "transport.in", "r", stdin ) ;
    freopen ( "transport.out", "w", stdout ) ;
    scanf ( "%d%d", & n, & k ) ;
    for ( i = 1 ; i <= n ; ++ i )
        scanf ( "%d", & v [ i ] ) ;
    st = 1 ;
    dr = n ;
    while ( st <= dr )
    {
        med = ( st + dr ) / 2 ;
        tr = 0 ;
        tr = transport ( med, n ) ;
        if(tr==k)
        {
            printf("%d",med);
            return 0;
        }
        if ( tr < k )
        {
            last = med ;
            dr = med - 1 ;
        }
        else
            st = med + 1 ;
    }
    printf ( "%d", last ) ;
    return 0;
}