Cod sursa(job #1826725)

Utilizator Dupree7FMI Ciobanu Andrei Dupree7 Data 10 decembrie 2016 20:09:14
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

int n, k, v[16001];

int verificare(int x)
{
    int i, c = 1, s = 0;

    for(i = 0; i < n; i++)
    {
        if(v[i] > x)
            return 0;
        if(s + v[i] <= x)
            s += v[i];
        else
        {
            s = v[i];
            c++;
        }
    }

    if(c < k)
        return 0;
    if(c == k)
        return 1;

    return 2;
}

void Transport(int lo, int hi)
{
    int mid;


    mid = lo + (hi - lo) / 2;
    int c = verificare(mid);

    if(c == 0)
        Transport(lo, mid - 1);
    else if (c == 2)
        Transport(mid + 1, hi);
    else
    {
        while(verificare(mid - 1) == 1)
            mid--;

        g << mid;
    }
}

int main()
{
    int i, maxim = -1, s = 0;;

    f >> n >> k;

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

    Transport(maxim, s);

    f.close();
    g.close();

    return 0;
}