Cod sursa(job #283489)

Utilizator silvia_the_bestSilvia Pripoae silvia_the_best Data 19 martie 2009 11:08:17
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <cstdio>
#define FIN "transport.in"
#define FOUT "transport.out"
#define N 16010

int n, k, sum, v[N], c;

void read()
{
    freopen(FIN, "r", stdin);
    freopen(FOUT, "w", stdout);

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

    for (int i = 1; i <= n; ++i)
    {
        scanf("%d", &v[i]);
        sum += v[i];
    }
}

int calc(int x)
{
    int s = 0, t = 0;
    for (int i = 1; i <= n; ++i)
    {
        if (s + v[i] > x)
        {
            ++t;
            s = 0;
        }
        s += v[i];
    }
    return t + 1;
}

void binarysearch()
{
    int p, u = sum, m, x;

    p = (sum % k) ? sum / k + 1 : sum / k;

    while (p < u)
    {
        m = (p + u) / 2;
        x = calc(m);
        if (x <= k)
            c = u = m;
        else if (x > k)
            p = m + 1;
    }
    c = p;
}

int main()
{
    read();

    binarysearch();

    printf("%d\n", c);
}