Cod sursa(job #1370840)

Utilizator Burbon13Burbon13 Burbon13 Data 3 martie 2015 17:34:47
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <iostream>
#include <cstdio>

#define n_max 16005
#define inf 0x3f3f3f3f

using namespace std;

int n,v[n_max],k,S;

void citire()
{
    scanf( "%d %d" , &n , &k ) ;
    for ( int i = 1 ; i <= n ; i ++ )
        {
            scanf( "%d" , &v[i] ) ;
            S += v[i] ;
        }
}

int verif( int nr )
{
    int ant = 0 , p = 1 , s  ;
    while ( p <= n )
    {
        s = 0 ;
        while ( p <= n && s + v[p] <= nr )
            s += v[p++] ;
        ant ++ ;
        if ( ant > k )
            return -1 ;
    }
    return 0 ;
}

void cautbin()
{
    int f = inf ;
    if ( k == 1 )
    {
        printf( "%d\n" , S ) ;
        return ;
    }
    int st , dr ;
    st = S / k ;
    dr = 16000*16000 ;
    while ( st <= dr )
    {
        int m = st + ( dr - st ) / 2 ;
        int cond = verif(m) ;
        if ( cond == 0 )
        {
            if ( f > m )
                f = m ;
            dr = m - 1 ;
        }
        else
            st = m + 1 ;
    }
    printf( "%d\n" , f ) ;
}

int main()
{
    freopen( "transport.in" , "r" , stdin ) ;
    freopen( "transport.out" , "w" , stdout ) ;
    citire() ;
    cautbin() ;
    return 0;
}