Cod sursa(job #1836240)

Utilizator NarniussAnghelache Bogdan Narniuss Data 28 decembrie 2016 00:16:49
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <cstdio>
using namespace std;

int a[16001], n;
bool capacitate(int c, int k)
{
    int i = 0, s = 0, nr_transp = 0;
    while(i < n){
        if(a[i] > c)
            return false;
        while(s + a[i] <= c && i < n){
            s += a[i];
            i++;
        }

        s = 0;
        nr_transp++;
    }

    if(nr_transp <= k)
        return true;
    return false;
}
int bin_search(int st, int dr, int k)
{
    int mid;
    mid = st + (dr - st) /2;
    if(st == dr)
        return st;
    if(capacitate(mid, k))
        bin_search(st, mid, k);
    else
        bin_search(mid+1, dr, k);

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

    scanf("%d%d", &n, &k);

    for(i = 0 ; i < n ; ++i)
    {
        scanf("%d", &a[i]);
    }

    nr_transport = bin_search(1, 10000000000, k);

    printf("%d\n", nr_transport);
    return 0;
}