Cod sursa(job #3340529)

Utilizator nzkhRemus Rizea nzkh Data 14 februarie 2026 20:25:32
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

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

int n, k;
vector<int> v;

bool check(int x) {
    int sum = 0;
    int transport = 1;
    for (int i = 0; i < n; i++) {
        if (v[i] > x) return false; 
        
        if (sum + v[i] > x) {
            transport++;
            sum = v[i];
        } else {
            sum += v[i];
        }
    }
    return transport <= k;
}

int main() {
    if (!(fin >> n >> k)) return 0;
    v.resize(n);
    
    int st = 0, dr = 0;
    for (int i = 0; i < n; i++) {
        fin >> v[i];
        if (v[i] > st) st = v[i]; 
        dr += v[i];             
    }

    int sol = dr;
    while (st <= dr) {
        int mid = st + (dr - st) / 2; 
        if (check(mid)) {
            sol = mid;
            dr = mid - 1;
        } else {
            st = mid + 1;
        }
    }

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