Cod sursa(job #901317)

Utilizator mvcl3Marian Iacob mvcl3 Data 1 martie 2013 09:39:11
Problema Transport Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<cstdio>
#define LL long long
using namespace std;

const int NMAX = 16009;
LL sum;
int n, k, v[NMAX];

inline int count(LL val)
{
    LL s = val;
    int kk = k, i;
    for(i = 1; i <= n && kk; ++i)
        if(v[i] <= s) s-= v[i];
        else
            --kk, --i, s = val;
    if(i == n + 1) return 1;

    return 0;
}
inline LL caut(LL st, LL dr)
{
    LL m;
    while(st < dr)
    {
        m = (st + dr) >> 1;
        if(count(m)) dr = m;
        else st = m + 1;
    }
    return m;
}
int main()
{
    freopen("transport.in", "rt", stdin);
    freopen("transport.out", "wt", stdout);

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

    LL sol = caut(1, sum + sum);

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