Cod sursa(job #1579342)

Utilizator blackoddAxinie Razvan blackodd Data 24 ianuarie 2016 17:38:13
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>

using namespace std;

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

#define MaxN 16001

int n, k, maxv = -1, s, minv = MaxN * MaxN + 1;
int a[MaxN];

int BinaryS(int left, int right);

int main() {

    fin >> n >> k;

    for ( int i = 1; i <= n; ++i ) {
        fin >> a[i];
        s += a[i];
        if ( a[i] > maxv )
            maxv = a[i];
    }

    fout << BinaryS(maxv, s);

    fin.close();
    fout.close();
    return 0;
}

int BinaryS(int left, int right) {

    while ( left <= right ) {

    int sum = 0, _k = 1;

    int mid = (left + right) / 2;

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

        sum += a[i];

        if ( sum > mid ) {
            sum = a[i];
            _k++;
        }

    }

    if ( sum <= mid ) { // mai am netransportate
        if ( _k > k )
            left = mid + 1;
        else
            right = mid - 1;
    }


    }

    return left;

}