Cod sursa(job #2937824)

Utilizator rapidu36Victor Manz rapidu36 Data 11 noiembrie 2022 09:20:20
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>

using namespace std;

const int CMAX = 256e6;
const int N = 16e3;

int v[N], k, n;

bool se_poate(int c)
{
    int cc = 0, nrt = 0;
    for (int i = 0; i < n; i++)
    {
        if (v[i] > cc)///salteaua curenta nu mai incape in camionul curent
        {
            nrt++;///aduc un camion nou
            cc = c;///noul camion e gol
        }
        if (v[i] > cc)///salteaua i nu incape nici macar intr-un camion gol
        {
            return false;
        }
        if (nrt > k)
        {
            return false;
        }
        cc -= v[i];
    }
    return true;
}

int main()
{
    ifstream in("transport.in");
    ofstream out("transport.out");
    in >> n >> k;
    for (int i = 0; i < n; i++)
    {
        in >> v[i];
    }
    int st = 1, dr = CMAX, rez = CMAX + 1;
    while (st <= dr)
    {
        int m = (st + dr) / 2;
        if (se_poate(m))
        {
            rez = m;///am un posibil rezultat
            dr = m - 1;///caut in stanga lui ceva mai bun (mai mic)
        }
        else///e in "zona rosie"
        {
            st = m + 1;///caut in dreapta lui m
        }
    }
    out << rez;
    in.close();
    out.close();
    return 0;
}