Cod sursa(job #1662842)

Utilizator raluca1234Tudor Raluca raluca1234 Data 25 martie 2016 10:14:13
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cstdio>
#define MAX_N 16000
using namespace std;

int N, K;
int v[MAX_N+5];

int nrTransporturi(int c){
    int nrt=1, sumc=0, i;
    for (i=1; i<=N; i++)
        if (sumc+v[i]>c){
            nrt++;
            sumc=v[i];
        }
        else sumc+=v[i];
    return nrt;
}

long long BinarySearch(int st, long long dr){
    long long med, last;
    while (st<=dr){
        med=dr-(dr-st)/2;
        if (nrTransporturi(med)<=K){
            dr=med-1;
            last=med;
        }
        else
            st=med+1;
    }
    return last;
}

int main(){
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);
    int i, maxv=0;
    long long sumv=0, ans;
    scanf("%d%d", &N, &K);
    for (i=1; i<=N; i++){
        scanf("%d", &v[i]);
        if (maxv<v[i]) maxv=v[i];
        sumv+=v[i];
    }
    ans=BinarySearch(maxv, sumv);
    printf("%lld", ans);

    return 0;
}