Cod sursa(job #1749202)

Utilizator petrooPetru G petroo Data 28 august 2016 01:45:57
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <stdio.h>

int v[16000],n,k;

int r_cond (int c_sup)
{
    int i = 1, intervale = 0, s;
    while ( i <= n)
    {
        s = 0;
        while ( s < c_sup)
        {
            s += v[i];
            ++i;
        }
        if( s > c_sup)
            --i;
        ++intervale;

        if(intervale > k)
            return 0;

    }
    return 1;

}

int caut_bin (int a, int b)
{
    int mid;
    while ( a <= b)
    {
        mid = (a + b) / 2;
        if (r_cond(mid))
        {
            if( !r_cond(mid - 1))
                return mid;
            else
                b = mid - 1;
        }
        else
            a = mid + 1;
    }
    return 0;
}

int main()
{
    int s = 0, max = 0;
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);
    scanf("%d %d", &n, &k);
    for(int i = 1; i <= n; i++)
    {
        scanf("%d", &v[i]);
        s += v[i];
        if( max < v[i])
            max = v[i];
    }
    printf("%d\n", caut_bin(max, s));
    return 0;
}