Cod sursa(job #1494253)

Utilizator czlateaZlatea Cezar czlatea Data 30 septembrie 2015 21:13:07
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <cstdio>
using namespace std;
int v[16005] ;
int max ( int a , int b )
{
    if ( a <= b )
        return b ;
    return a ;
}
int verif ( int p , int n , int k )
{
    int x = 1, c , i ;
    c = v[1] ;
    for ( i = 2; i <= n ; i ++ )
    {
        if(c + v[i] <= p)
            c += v[i];
        else
        {
            c = v[i];
            x ++ ;
        }
    }
    if ( x <= k )
        return 1 ;
    return 0 ;
}
int cb ( int st, int dr , int n , int k )
{
    int med , rez ;
    while(st <= dr)
    {
        med = (st + dr) / 2 ;
        if ( verif ( med , n , k ))
        {
            rez = med ;
            dr = med - 1 ;
        }
        else
        st = med + 1 ;
    }
    return rez ;
}

int main()
{
    int n , k , i , s = 0 , y = 0 ;
    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] ) ;
        s += v[i] ;
        y = max ( y , v[i]);
    }
    printf ( "%d\n" , cb ( y , s , n , k ) );
    return 0;
}