Cod sursa(job #2623836)

Utilizator albertyoAlbert Mindrescu albertyo Data 3 iunie 2020 23:53:29
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#define N 16001

using namespace std;

ifstream fin("transport.in");
ofstream fout("transport.out");



int n, k;
int vect[N];

int Verificare ( int x ) {

    int i, sumaMax = 0, nrTure = 0;

    for ( i = 1; i <= n; i++ )

        if ( vect[i] > x ) return 0;
        else if (sumaMax + vect[i] > x) {
            nrTure ++; sumaMax = vect[i];
            if (nrTure == k + 1) return 0;
        }
        else sumaMax += vect[i];

    nrTure ++;
    if (nrTure > k) return 0;
    return 1;
}

int CautareBinara () {

    int st = 1, dr = 256000000, mij, nr;
    while ( st <= dr ) {

        mij = st + (dr - st) / 2;
        nr = Verificare(mij);
        if ( nr == 1 ) dr = mij - 1;
        else if ( nr == 0) st = mij + 1;
    }

    return st;
}

int main()
{
    int i;
    fin >> n >> k;
    for ( i = 1; i <= n; i++ )
        fin >> vect[i];

    fout << CautareBinara();

    return 0;
}