Cod sursa(job #2421444)

Utilizator Ana_22Ana Petcu Ana_22 Data 15 mai 2019 09:33:02
Problema Transport Scor 80
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <stdio.h>
#include <stdlib.h>

int v[16000];

int main() {
    FILE *fin, *fout;
    long long n, k, i, nr, suma, cap, st, dr, mijl, rez, max;
    fin = fopen( "transport.in", "r" );
    fscanf( fin, "%lld%lld", &n, &k );
    suma = 0;
    max = 0;
    for( i = 0; i < n; i++ ) {
        fscanf( fin, "%lld", &v[i] );
        suma += v[i];
        if( v[i] > max )
            max = v[i];
    }
    fclose( fin );
    st = max;
    dr = suma;
    rez = 200000000000000000;
    while( st <= dr ) {
        mijl = ( st + dr ) / 2;
        nr = 1;
        cap = 0;
        for( i = 0; i < n; i++ ) {
            cap += v[i];
            if( cap > mijl ) {
                cap = v[i];
                nr++;
            }
        }
        if( nr < k )
           dr = mijl - 1;
        else if( nr > k )
           st = mijl + 1;
        else {
            dr = mijl - 1;
            if( mijl < rez )
                rez = mijl;
        }
    }
    fout = fopen( "transport.out", "w" );
    fprintf( fout, "%lld", rez );
    fclose( fout );
    return 0;
}