Cod sursa(job #2519715)

Utilizator marius004scarlat marius marius004 Data 8 ianuarie 2020 12:35:02
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <vector>

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

int n,k,maxx;
std::vector<int>v;

bool Check(int value){
    
    int cnt{};
    int s{};
    
    for(int i = 0;i < n;++i){
        if(v[i] > value)
            return 0;
        if(s + v[i] <= value)
            s += v[i];
        else{
            cnt++;
            s = v[i];
        }
    }
    
    if(s != 0)
        cnt++;
    
    return cnt <= k;
}

int main(){
    
    f >> n >> k;
    v.resize(n);
    
    for(int i = 0;i < n;++i){
        f >> v[i];
        maxx = std::max(maxx,v[i]);
    }
    
    int left = maxx;
    int right = 16'000 * 16'000;
    int sol = -1;
    
    while(left <= right){
        
        int mid = (left + right) / 2;
        
        if(Check(mid)){
            sol = mid;
            right = mid - 1;
        }else
            left = mid + 1;
    }
    
    g << sol;
    
    return 0;
}