Cod sursa(job #2889913)

Utilizator MortemPlaiasu Iulia-Silvia Mortem Data 13 aprilie 2022 18:59:30
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>

FILE *fin = fopen("transport.in", "r");
FILE *fout = fopen("transport.out", "w");

int saltele[16005];

int N, K;

bool test(int c)
{
    int total = 1;
    int taken = 0;
    for (int i = 0; i < N; i++)
    {
        if (taken + saltele[i] > c)
        {
            taken = saltele[i];
            total++;
            if (taken > c)
                return false;
        }
        else
            taken += saltele[i];
    }
    return total <= K;
}

int binary_search(int low, int high)
{
    if (high == low)
        return high;
    if (high == low + 1)
    {
        if (test(high))
            return high;
        return low;
    }
    int mid = (high + low) / 2;
    if (test(mid))
        return binary_search(low, mid);
    return binary_search(mid, high);
}

int main()
{
    fscanf(fin, "%d %d", &N, &K);
    for (int i = 0; i < N; i++)
        fscanf(fin, "%d", &saltele[i]);
    fprintf(fout, "%d", binary_search(1, N * 16000));
}