Cod sursa(job #2730983)

Utilizator cipri321Marin Ciprian cipri321 Data 27 martie 2021 10:35:05
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <iostream>
#include <fstream>

#define DIM 16005
#define INF 2000000000

using namespace std;

ifstream fi("transport.in");
ofstream fo("transport.out");

bool check_capacity(int S[], int n, int k, int cap) {
    int nrd=0, scrt = 0;
    for(int i=1;i<=n+1;i++) {
        if(scrt+S[i] <= cap) {
            scrt+=S[i];
        } else {
            scrt=S[i];
            nrd++;
        }
    }
    return nrd<=k;
}

int find_capacity(int S[], int n, int k) {
    int left = 0, right = 0;
    for(int i=1;i<=n;i++) {
        left=max(left, S[i]);
        right+=S[i];
    }
    while(left<right) {
        int mid = (left+right)/2;
        if(check_capacity(S, n, k, mid))
            right = mid;
        else
            left = mid+1;
    }
    return left;
}

int main() {
    int n,k;
    int S[DIM];
    fi>>n>>k;
    for(int i=1;i<=n;i++) {
        fi>>S[i];
    }
    S[n+1] = INF;
    fo<<find_capacity(S, n, k);
    return 0;
}