Cod sursa(job #1276082)

Utilizator isa_fares_mudiFares Mohamad isa_fares_mudi Data 25 noiembrie 2014 22:17:15
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>
#include <stdlib.h>
int v[16001];
int n, k ;
int ok ( int c )
{
    int tr, s , i ;
    tr = s = 0 ;
    for ( i = 1 ; i <= n ; i ++ )
    {
        if ( v[i] > c )
            return 0 ;
        s += v[i] ;
        if ( s > c )
        {
            tr++;
            s = v[i] ;
        }
    }
    if ( s > 0 )
        tr++;
    return tr <= k ;
}
int bs( int dr )
{
    int med, last, st;
    last = dr + 1 ;
    st = 1 ;
    while( st <= dr )
    {
        med = dr - ( ( dr - st ) >> 1 ) ;
        if( ok ( med ) ) {
            last = med  ;
            dr = med - 1 ;
        }
        else
            st = med + 1 ;
    }
    return last ;
}
int main()
{
    FILE *fin, *fout;
    fin = fopen( "transport.in", "r" ) ;
    fout = fopen( "transport.out", "w" ) ;
    int i, s ;
    fscanf( fin,"%d%d",&n,&k ) ;
    s = 0 ;
    for ( i = 1 ; i <= n ; i ++ )
    {
        fscanf( fin,"%d",&v[i] ) ;
        s += v[i] ;
    }
    fprintf( fout,"%d",bs(s) ) ;
    fclose( fin ) ;
    fclose( fout ) ;
    return 0;
}