Cod sursa(job #2467690)

Utilizator dey44andIoja Andrei-Iosif dey44and Data 4 octombrie 2019 20:44:32
Problema Transport Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#include <queue>

#define input "transport.in"
#define output "transport.out"
#define NMAX 16005

using namespace std;

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

int saltele, transporturi, capacitati[NMAX], minim;

void Read_Data()
{
    in >> saltele >> transporturi;
    for(int i = 1; i <= saltele; i++)
    {
        in >> capacitati[i];
        minim = max(minim, capacitati[i]);
    }
}

bool Is_Ok(int capacity)
{
    //out << capacity << " -> ";
    int drumuri = 0;
    for(int i = 1; i <= saltele; i++)
    {
        int capap = 0;
        while(capap < capacity)
        {
            capap += capacitati[i];
            i++;
        }
        if(capap <= capacity)
        i--;
        else capap -= capacitati[i-1], i-=2;
        drumuri++;
        //out << capap << " ";
    }
    //out << "\n";
    if(drumuri <= transporturi)
        return true;
    return false;
}

void Binary_Search()
{
    int st = minim, dr = 16000, sol = -1;
    while(st <= dr)
    {
        int midd = (st + dr) / 2;
        if(Is_Ok(midd)) dr = midd - 1, sol = midd;
        else st = midd + 1;
    }
    out << sol;
}

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