Cod sursa(job #3311309)

Utilizator 17.emi._Tabara Emilian 17.emi._ Data 21 septembrie 2025 10:28:39
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>
using namespace std;

const int MAXN = 16000;
int v[MAXN];
int N, K;

ifstream fin("transport.in");
ofstream fout("transport.out");

bool can(int C) {
    int transports = 1;
    int current = 0;
    for(int i = 0; i < N; i++){
        if(current + v[i] <= C){
            current += v[i];
        } else {
            transports++;
            current = v[i];
            if(transports > K) return false;
        }
    }
    return true;
}

int main() {
    ios::sync_with_stdio(false);
    fin.tie(nullptr);

    fin >> N >> K;
    int maxi = 0;
    long long sum = 0;
    for(int i = 0; i < N; i++){
        fin >> v[i];
        if(v[i] > maxi) maxi = v[i];
        sum += v[i];
    }

    int lo = maxi, hi = (int)sum;
    int best = hi;

    while(lo <= hi){
        int mid = lo + (hi - lo)/2;
        if(can(mid)){
            best = mid;
            hi = mid - 1;
        } else {
            lo = mid + 1;
        }
    }

    fout << best << "\n";
    return 0;
}