Cod sursa(job #1826836)

Utilizator Dupree7FMI Ciobanu Andrei Dupree7 Data 10 decembrie 2016 22:49:16
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 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 2;
        if(s + v[i] <= x)
            s += v[i];
        else
        {
            s = v[i];
            c++;
        }
    }

    if(c < k)
        return 0;
    else if(c == k)
        return 1;
    else
        return 2;
}

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

    if(lo >= hi)
        g << lo;
    else
    {
        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
        {
            if(verificare(mid - 1) != 1)
                g << mid;
            else
                Transport(lo, mid - 1);
        }
    }
}


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;
}