Cod sursa(job #2910792)

Utilizator divadddDavid Curca divaddd Data 25 iunie 2022 00:37:00
Problema Transport Scor 80
Compilator cpp-64 Status done
Runda 3_iulie Marime 0.92 kb
#include <iostream>
#include <fstream>
#define MAX 16002
using namespace std;
int n,k,v[MAX],st,dr;

ifstream fin("transport.in");
ofstream fout("transport.out");

bool verif(int val){
    int cnt = 1, sum = 0;
    for(int i = 1; i <= n; i++){
        if(sum + v[i] <= val){
            sum += v[i];
        }else{
            cnt++;
            sum = v[i];
        }
    }
    return (cnt <= k);
}

int main()
{
    fin >> n >> k;
    for(int i = 1; i <= n; i++){
        fin >> v[i];
        st = min(st, v[i]);
        dr += v[i];
    }
    /// 0 0 0 0 1 1 1 1
    ///         ^
    /// filtru = nr de transporturi <= k
    /// val per trans ++
    /// nr trans      --
    int ans = 0;
    while(st <= dr){
        int mid = (st+dr)/2;
        if(verif(mid)){
            ans = mid;
            dr = mid-1;
        }else{
            st = mid+1;
        }
    }
    fout << ans;
    return 0;
}