Cod sursa(job #2646707)

Utilizator andrei_marciucMarciuc Andrei andrei_marciuc Data 1 septembrie 2020 18:33:55
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <stdio.h>
int n, k, v[ 16002 ];
long long s;

int bun( int mij ){
    int i, cate, pun;
    cate = 1;
    pun = 0;
    for( i = 0; i < n; i++ ){
        if( pun + v[ i ] <= mij )
            pun += v[ i ];
        else {
            ++cate;
            pun = v[ i ];
        }
        if( cate > k )
            return 0;
    }
    if( cate > k )
        return 0;
    return 1;
}

int main()
{
    int i, maxx = 0;
    FILE *fin = fopen( "transport.in", "r" );
    fscanf( fin, "%d%d", &n, &k );
    for( i = 0; i < n; i++ ){
        fscanf( fin, "%d", &v[ i ] );
        s += v[ i ];
        if( maxx < v[ i ] )
            maxx = v[ i ];
    }
    fclose( fin );
    int st = maxx;
    int dr = s + 1;
    int mij, sol = 0;
    while( st <= dr ){
        mij = ( st + dr ) / 2;
        if( bun( mij ) == 1 ){
            dr = mij - 1;
            sol = mij;
        } else st = mij + 1;
    }
    FILE *fout = fopen( "transport.out", "w" );
    fprintf( fout, "%d\n", sol );
    fclose( fout );
    return 0;
}