Cod sursa(job #2480333)

Utilizator mihaicivMihai Vlad mihaiciv Data 25 octombrie 2019 12:53:28
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <cmath>
#define NMAX 16000
#define CMAX 16000*16000
using namespace std;

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

int n, k, v[NMAX];
int c_min;

bool valid(int dim) {
    int nr_frecv = 0;
    int el_curent = 0;
    int dim_curenta = 0;
    while (el_curent < n) {
        if (v[el_curent] > dim) return false;
        if (dim_curenta + v[el_curent] <= dim) {
            dim_curenta += v[el_curent];
        } else {
            nr_frecv ++;
            dim_curenta = v[el_curent];
        }
        el_curent ++;
    }
    return (nr_frecv < k);
}

void bin_search(int stg, int dr) {
    if (stg > dr) return;
    if (stg == dr) {
        if (valid(stg)) {
            c_min = min(c_min, stg);
        }
        return;
    }
    int mij = (stg + dr) / 2;
    if (valid(mij)) {
        bin_search(stg, mij);
    } else {
        bin_search(mij + 1, dr);
    }
}

int main() {

    f >> n >> k;
    for (int i = 0; i < n; ++i) {
        f >> v[i];
    }

    c_min = CMAX;
    bin_search(1, CMAX);

    g << c_min;

    return 0;
}