Cod sursa(job #2822824)

Utilizator db_123Balaban David db_123 Data 25 decembrie 2021 18:25:03
Problema Transport Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <vector>
#include <climits>

using namespace std;

ifstream cin("transport.in");
ofstream cout("transport.out");

int n,k,minV=INT_MAX,sumV=0;
vector<int> v;

void read(){
    cin>>n>>k;
    v.resize(n+1,0);
    for(int i=1;i<=n;i++){
        cin>>v[i];
        minV=min(minV,v[i]);
        sumV+=v[i];
    }
}

int getNrTransport(int capacitate){
    int res=0,drum=0;
    for(int i=1;i<=n;i++){
        if(drum+v[i]>capacitate){
            res++;
            drum=v[i];
        }
        else{
            drum+=v[i];
        }
    }
    if(drum>0 && capacitate>=drum){
        res++;
    }
    return res;
}

void solve(){
    int l=minV,r=sumV,mid=0,nrTransport=0,result=0;
    while(l<=r){
        mid=l+(r-l)/2;
        nrTransport= getNrTransport(mid);
        if(nrTransport>k){
            l=mid+1;
        }
        else{
            result=mid;
            r=mid-1;
        }
    }
    cout<<result;
}

int main() {
    read();
    //cout<<getNrTransport(9);
    solve();
    return 0;
}