Cod sursa(job #2661297)

Utilizator Fantastic_Mantudor voicu Fantastic_Man Data 21 octombrie 2020 18:54:17
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>
using namespace std;
const int NMAX = 16000;
int v[NMAX],n;
int transporturi(int k) {
    int cate, i, s;
    cate = 1; s = 0;
    for ( i = 0; i < n; i++ )
        if( v[i] > k)
            return 1017932;
        else if ( s + v[i] <= k)
            s += v[i];
        else {
            cate++;
            s = v[i];
        }
    return cate;
}

int cb(int x,int s) {
    int st, dr, mij;
    st = 0; dr = s;
    while ( dr - st > 1 ) {
        mij = (st + dr) / 2;
        if( transporturi(mij) > x )
            st = mij;
        else
            dr = mij;
    }
    return dr;
}

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