Cod sursa(job #1799144)

Utilizator andreiugravuFMI Andrei Zugravu andreiugravu Data 5 noiembrie 2016 20:26:12
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 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, minim, maxim;

long long verificare(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;

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

    return left;
}

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

    fout<<cautareBinara(minim, maxim);

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

    return 0;
}