Cod sursa(job #1579333)

Utilizator blackoddAxinie Razvan blackodd Data 24 ianuarie 2016 17:33:05
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 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 Checktr(int k);

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 CheckTr(int k) {

    int i = 1, sum = 0, _k = 0;

    while ( i <= n )  {

        if ( sum + a[i] <= k )
            sum += a[i];

        else {
            sum = a[i];
            _k++;
        }

        i++;
    }

    if ( sum != 0 )
        _k++;
    return _k;
}

int BinaryS(int left, int right) {

    while ( left <= right ) {

    int mid = (left + right) / 2;

    int nrt = CheckTr(mid);

    if ( nrt == k ) {

        if ( CheckTr(mid-1) > k )
            return mid;
        else
            right = mid - 1;
    }

    if ( nrt < k )
        right = mid - 1;
    if ( nrt > k )
        left = mid + 1;




    }
}