Cod sursa(job #2589652)

Utilizator Senth30Denis-Florin Cringanu Senth30 Data 26 martie 2020 17:53:27
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <bits/stdc++.h>
#define INF 2000000000
#define MOD 997

using namespace std;
const int NMAX = 16010;

int N, K, SMAX, SUM;
int v[NMAX];

void read(){
    scanf("%d%d", &N, &K);
    for(int i = 1; i <= N; i++){
        scanf("%d", &v[i]);
        SUM += v[i];
        SMAX = max(SMAX, v[i]);
    }
}

inline bool check(int x){
    int cap = 0, cnt = 1;
    for(int i = 1; i <= N; i++){
        if(cap + v[i] > x){
            cnt++;
            cap = 0;
        }
        cap += v[i];
    }
    if(cnt > K)
        return false;
    else return true;
}

int binsearch(int st, int dr){
    int mid, last;
    while(st <= dr){
        int mid = (st + dr) / 2;
        if(check(mid)){
            dr = mid - 1;
            last = mid;
        } else st = mid + 1;
    }
    return last;
}

int main(){

    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);

    read();

    printf("%d", binsearch(SMAX, SUM));

    return 0;
}