Cod sursa(job #2512210)

Utilizator MariaCarminaCretu Maria Carmina MariaCarmina Data 20 decembrie 2019 18:39:37
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
/*
    10 4
    3 3 1 1 1 1 1 7 7 7
*/

#include <fstream>
#include <iostream>
using namespace std;

const int INF = 16000 * 16000;

bool check_capacity(int capacity, int N, int K, int *v) {
    int current_capacity = capacity;
    int transport_count = 1;
    for (int i = 0; i < N; ++i) {
        if (v[i] <= current_capacity) {
            current_capacity -= v[i];
        } else {
            transport_count++;
            current_capacity = capacity;
            current_capacity -= v[i];
        }
    }
    if (transport_count > K) {
        return false;
    }
    return true;
}

int main() {
    int N, K;
    ifstream fin("transport.in");
    ofstream fout("transport.out");
    fin >> N >> K;
    int *v = new int[N];
    for (int i = 0; i < N; ++i) {
        fin >> v[i];
    }
    int capacity, max_saltea = 0;
    for (int i = 0; i < N; ++i) {
        if (max_saltea < v[i]) {
            max_saltea = v[i];
        }

    }
    // capacity = max_saltea;
    // while (!check_capacity(capacity, N, K, v)) {
    //     capacity++;
    // }
    //simulez vectorul de capacitati valabile
    int stg = max_saltea;
    int dr = INF;
    while (stg <= dr) {
        int mid = (stg + dr) / 2;
        if (check_capacity(mid, N, K, v) == 1) {
            dr = mid - 1;
            capacity = mid;
        } else {
            stg = mid + 1;
        }
    }
    fout << capacity;
    return 0;
}