Cod sursa(job #2853573)

Utilizator db_123Balaban David db_123 Data 20 februarie 2022 13:50:34
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#include <vector>
#include <stack>
#include <climits>

using namespace std;

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

int n,k;
stack<int> stk;
int maxV=0;

void read(){
    cin>>n>>k;
    int nr;
    for(int i=1;i<=n;i++){
        cin>>nr;
        stk.push(nr);
        maxV+=nr;
    }
}

bool canItBeDone(int nrVolum){
    stack<int> cp=stk;
    int nrDrumuri=0,volum=0;
    while(!cp.empty()){
        if(nrDrumuri>k){
            return false;
        }
        nrDrumuri++;
        volum=0;
        while(!cp.empty() && volum+cp.top()<=nrVolum){
            volum+=cp.top();
            cp.pop();
        }
    }

    if(nrDrumuri<=k){
        return true;
    }
    return false;
}

void solve(){
    int l=1,r=maxV,mid=0;
    int sol=INT_MAX;
    while(l<=r){
        mid=l+(r-l)/2;
        if(canItBeDone(mid)){

            sol=min(sol,mid);
            r=mid-1;
        }
        else{
            l=mid+1;
        }
    }
    cout<<sol;
}

int main() {

    read();
    solve();
    return 0;
}