Cod sursa(job #122462)

Utilizator TabaraTabara Mihai Tabara Data 12 ianuarie 2008 14:54:28
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
/*80 puncte
WA pe 1,2 
*/

#include <stdio.h>

#define in "transport.in"
#define out "transport.out"
#define NMAX 16003

int n, MAXIM, _poz, count, K;
int VOL[NMAX];
int st, dr, mij;

int Ok( int C );

int main()
{
    freopen( in, "r", stdin );
    freopen( out, "w", stdout );
    
    scanf( "%d%d", &n, &K );
    int i;
    for ( i = 1; i <= n; ++i )
    {
        scanf( "%d", &VOL[i] );
        MAXIM += VOL[i];
    }
    //cautarea binara
    st = 1; 
    dr = MAXIM;    
    
    while ( st <= dr )
    {
          mij = ((st+dr)>>1);
          if ( Ok(mij) ) dr = mij-1;
          else st = mij+1;
    }
    printf( "%d\n", st );
    return 0;
}

int Ok( int C )
{
    int suma = 0;
    int i;
    count = 0;
    suma = VOL[1];
    for ( i = 2; i <= n; ++i )
    {
        if ( (suma + VOL[i]) > C )
        {
             count++;
             suma = VOL[i];
        }
        else suma += VOL[i];
    }
    if ( suma <= C ) 
    {
         count++;
    }
    
    else if ( suma > C )
    {
         if ( suma % C == 0 ) count += (suma / C);
         else count += ( (suma / C) + 1);
    }
    if ( count <= K ) return 1;
    return 0;
}