Cod sursa(job #3261903)

Utilizator RichardChessBibire David-Alexandru RichardChess Data 7 decembrie 2024 18:08:03
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <vector>
using namespace std;

ifstream f("transport.in");
ofstream g("transport.out");

int N, K;
int v[16001];

bool possible(int capacity) {
    int trips = 0;
    long long current_load = 0;
    for (int i = 1; i <= N; i++) {
        if (v[i] > capacity) {
            return false;
        }
        if (current_load + v[i] <= capacity) {
            current_load += v[i];
        } else {
            trips++;
            current_load = v[i];
        }
    }
    if (current_load > 0) {
        trips++;
    }
    return trips <= K;
}

int main() {
    int max=-1;
    long long sum=0;
    f>>N>>K;
    for(int i = 1; i<=N; i++) {
        f >> v[i];
        if (v[i] > max) {
            max = v[i];
        }
        sum += v[i];
    }
    int left = max;
    int right = sum;
    int result = right;
    for (int p = 30; p >= 0; p--) {
        int mid = result - (1 << p);
        if (mid >= left && possible(mid)) {
            result = mid;
        }
    }
    g<<result;
    return 0;
}