Cod sursa(job #1799140)

Utilizator andreiugravuFMI Andrei Zugravu andreiugravu Data 5 noiembrie 2016 20:19:10
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
//Transport

#include <fstream>

using namespace std;

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

#define NMAX 16002

long long N, K;
long long v[NMAX];
long long i, nr, nrmax = -1;

long long nrTransporturi(long long x) {
    long long contor = 1, Sum = 0;
    for(i = 1 ; i <= N ; i++) {
        if(v[i] > x) return 0;
        Sum += v[i];
        if(Sum > x) {
            Sum = v[i];
            contor++;
        }
    }
    if(contor > K) return 0;
    return 1;
}

long long cautareBinara(long long left, long long right) {
    long long middle, decide;

    while(left < right) {
        middle = (left + right)/2;
        decide = nrTransporturi(middle);
        if(decide == 0) left = middle + 1; //caut in dreapta
        else right = middle; //caut in stanga
    }

    return left;
}

int main()
{
    fin>>N>>K;
    for(i = 1 ; i <= N ; i++) {
        fin>>v[i];
        nrmax += v[i];
        if(nrmax < v[i])
            nrmax = v[i];
    }

    fout<<cautareBinara(nrmax, NMAX);

    fin.close();
    fout.close();

    return 0;
}