Cod sursa(job #1834710)

Utilizator mdiannnaMarusic Diana mdiannna Data 24 decembrie 2016 22:44:58
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>
#include <stdio.h>

using namespace std;
int N, K;
int A[1000000];

bool check_capacity(int c, int K){
    int i = 0;
    int suma = 0;
    int nr_transporturi = 0;

    while(i<N){
        if(A[i] > c)
            return 0;
        while(suma + A[i]<= c && i<N){
            suma+=A[i];
            i++;
        }

        suma = 0;
        nr_transporturi++;
    }
    if(nr_transporturi <= K)
        return true;
    return false;

}

int cautare_binara(int st, int dr, int K){
    int m = (st+dr)/2;
    if(st == dr)
        return st;
    if(check_capacity(m, K))
        cautare_binara(st, m, K);
    else
        cautare_binara(m+1, dr, K);
}

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

    cin >> N >> K;
    for(int i=0; i<N; i++)
        cin >> A[i];

    cout << cautare_binara(0, 256000000, K);
    return 0;
}