Cod sursa(job #2147711)

Utilizator dey44andIoja Andrei-Iosif dey44and Data 28 februarie 2018 22:08:30
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream>
#define STIVA_MAX 16005
#define input "transport.in"
#define output "transport.out"

using namespace std;

ifstream in(input);
ofstream out(output);

int transporturi, cutii;
int stiva_cutii[STIVA_MAX];
int left_min = 0, right_max;

void Read()
{
    in >> cutii >> transporturi;
    for(int i = 1; i <= cutii; i++)
    {
        in >> stiva_cutii[i];
        left_min = max(left_min, stiva_cutii[i]);
        right_max += stiva_cutii[i];
    }
}

bool Find(int capacity)
{
    int transports = 1;
    int local = 0;
    for(int i = 1; i <= cutii; i++)
    {
        if(local + stiva_cutii[i] <= capacity)
            local += stiva_cutii[i];
        else
        {
            //out << local << " ";
            local = stiva_cutii[i], transports++;
        }
    }
    //out << "\n";
    if(transports <= transporturi)
        return true;
    return false;
}

void Binary_Search()
{
    int local_solution = 0;
    while(left_min <= right_max)
    {
        int middle = (left_min + right_max) / 2;
        bool stats = Find(middle);
        if(stats == true)
            local_solution = middle, right_max = middle - 1;
        else left_min = middle + 1;
    }
    out << local_solution << "\n";
}

int main()
{
    Read();
    Binary_Search();
    return 0;
}