Cod sursa(job #1656064)

Utilizator Alex_AeleneiAlex Aelenei Ioan Alex_Aelenei Data 18 martie 2016 18:02:57
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 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 )
      {
        last = med ;
        dr = med - 1 ;
      }
      else
        st = med + 1 ;
    }
    printf ( "%d" , last ) ;
    return 0;
}