Cod sursa(job #2069318)

Utilizator SburlyAndrei Florin Sburly Data 18 noiembrie 2017 12:52:40
Problema Transport Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
/********************
    Created by Sburly
********************/
#include <fstream>

using namespace std;

int n, k, v[16000];

bool ok(const long int& c)
{
    int i = 0;
    long int s = 0;
    int d = 1;
    while(i < n)
    {
        if(s+v[i] > c)
            s=v[i++],d++;
        else
            s+=v[i++];
        if(d>k)
            return false;
    }
    return true;
}

long int bin_search(long int& s, long int& d)
{
    long int lmij= 0;
    long int mij = s;

    while(s<=d)
    {
        lmij = mij;
        mij = (s+d)/2;

        if(ok(mij))
            d = mij-1;
        else
            s=mij+1;
    }
    return ok(mij)?mij:lmij;
}

int main()
{
    ifstream f("transport.in");
    ofstream g("transport.out");

    long int mx=-1, s=0;

    f >> n >> k;
    for(int i = 0; i < n; i++)
    {
        f >> v[i];
        s+=v[i];
        if(v[i] > mx)
            mx = v[i];
    }

    g << bin_search(mx, s);

    return 0;
}