Cod sursa(job #1708579)

Utilizator Tiberiu02Tiberiu Musat Tiberiu02 Data 27 mai 2016 14:28:56
Problema Transport Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.79 kb
# include <stdio.h>
# include <stdlib.h>

# define MAX_N 16000

int v[MAX_N];

int N, K;

int sePoate( int c ) {
    int i, s, j;

    s = 0;
    j = 1;
    for ( i = 0; i < N; i ++ )
        if ( s + v[i] <= c )
            s += v[i];
        else if ( v[i] <= c ) {
            s = v[i];
            j ++;
        } else
            return 0;

    return j <= K;
}

int main() {
    FILE *fin = fopen( "transport.in", "r" ), *fout = fopen( "transport.out", "w" );

    int i, pas, pos;

    fscanf( fin, "%d%d", &N, &K );

    for ( i = 0; i < N; i ++ )
        fscanf( fin, "%d", &v[i] );

    pos = 0;
    for ( pas = ( 1 << 30 ); pas > 0; pas >>= 1 )
        if ( !sePoate( pos + pas ) )
            pos += pas;

    fprintf( fout, "%d", pos + 1 );

    fclose( fin );
    fclose( fout );

    return 0;
}