Cod sursa(job #3223502)

Utilizator PescarusTanislav Luca Andrei Pescarus Data 13 aprilie 2024 12:36:38
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
const int nmax = 16005;
int a[nmax];
int n, k;
int nrdrumuri(int cap){
    int nr = 1, volum = 0;
    for(int i = 1; i <= n; i++){
        if(volum + a[i] <= cap){
            volum += a[i];
        }
        else {
            volum = a[i];
            nr++;
        }
    }
    return nr;
}
int main(){
    ios::sync_with_stdio(0);
    f.tie(0);
    f >> n >> k;
    int maxim = -100;
    int s = 0;

    for(int i = 1; i <= n; i++){
        f >> a[i];
        maxim = max(maxim, a[i]);
        s += a[i];
    }
    int st = maxim, dr = s, sol = 0;
    while(st <= dr){
        int m = (st + dr) / 2;
        int numar = nrdrumuri(m);
        if(numar <= k){
            sol = m;
            dr = m - 1;
        }
        else{
            st = m + 1;
        }
    }
    g << sol << '\n';
}