Cod sursa(job #3279292)

Utilizator gabrielrusu2712Rusu Gabriel Eduard gabrielrusu2712 Data 22 februarie 2025 13:45:53
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream input("transport.in");
ofstream output("transport.out");

int N, K;
vector<int> saltele;

int gasit(int i);

int cautareBinara (int i, int j) {
    int p;
    while (i < j) {
        if (i + 1 == j) {
            int toR = gasit(j) == 1 ? j : i;
            return toR;
        }
        p = (i + j) / 2;
        int g = gasit(p);
        if (g == 1)
            j = p;
        else
            i = p;
    }
    return p;
}

int gasit (int i) {
    int j = i;
    int k = 1;
    for (int o = 0; o < N; o++)
        if (i >= saltele[o]) {
            i -= saltele[o];
        } else {
            i = j;
            k++;
            o--;
        }
    if (k <= K) return 1;
    return -1;
}


int main()
{
    int suma = 0;
    int maxim = 0;
    input >> N >> K;

    for (int i = 1; i <= N; i++) {
        int x;
        input >> x;
        suma += x;
        maxim = max(maxim, x);
        saltele.push_back(x);
    }
    if (gasit(maxim) == 1)
        output << maxim;
    else if (gasit(suma) == 1 && gasit(suma - 1) == -1)
        output << suma;
    else
        output << cautareBinara(maxim, suma);
    return 0;
}