Cod sursa(job #2077647)

Utilizator priboiraduPriboi Radu Bogdan priboiradu Data 28 noiembrie 2017 13:10:36
Problema Transport Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>
#include <stdlib.h>
#define L 28

int v[16001];

int ok( int nr, int n, int k ) {
    int i = 0, s = 0, c = 1;
    do {
        i++;
        if ( v[i] + s <= nr )
            s += v[i];
        else {
            c++;
            s = v[i];
        }
    } while ( i <= n && v[i] <= nr );
    if ( v[i] > nr || c > k )
        return 0;
    return 1;
}

int cautBin( int n, int k ) {
    int pas = 1 << L, r = 0;
    while ( pas != 0 ) {
        if ( ok( r + pas, n, k ) == 0 )
            r += pas;
        pas /= 2;
    }
    return r + 1;
}

int main() {
    FILE *fin, *fout;
    int n, k, i;
    fin = fopen( "transport.in", "r" );
    fout = fopen( "transport.out", "w" );
    fscanf( fin, "%d%d", &n, &k );
    for ( i = 1; i <= n; i++ )
        fscanf( fin, "%d", &v[i] );
    fprintf( fout, "%d", cautBin( n, k ) );
    fclose( fin );
    fclose( fout );
    return 0;
}