Cod sursa(job #2052510)

Utilizator OctavianVasileVasileOctavian OctavianVasile Data 30 octombrie 2017 18:00:31
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
using namespace std;
ifstream cin ("transport.in") ;
ofstream cout ("transport.out") ;
int v [ 16001 ] ;
int main()
{
    int n, k ;
    cin >> n >> k ;
    int st , dr, md , maxx = 0, sum = 0, sumnr = 0 ;
    for ( int i = 1 ; i <= n ; i ++ )
    {
        cin >> v [ i ] ;
        sum += v [ i ] ;
        if ( v [ i ] > maxx )
            maxx = v [ i ] ;
    }
    int cate = 0 ;
    int val ;
    st = maxx ; dr = sum ;
    while ( st <= dr )
    {
        cate = 1 ;
        sumnr = 0 ;
        md = ( st + dr ) / 2 ;
        for ( int i = 1 ; i <= n ; i ++ )
        {
            if ( v [ i ] + sumnr <= md )
                sumnr += v [ i ] ;
            else
            {
                cate ++ ;
                sumnr = v [ i ] ;
            }
        }
        if ( cate <= k )
        {
            dr = md - 1 ;
            val = md ;
        }
        else
            st = md  + 1 ;
    }
    cout << val ;
    return 0;
}