Cod sursa(job #1877755)

Utilizator zdavid112zIon David-Gabriel zdavid112z Data 13 februarie 2017 18:23:05
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>

using namespace std;

int v[16001];
int n, k;

bool calc(int val)
{
    int nt = 0, tc = 0;
    for(int i = 0; i < n; i++)
    {
        if(v[i] > val)
            return false;
        if(tc + v[i] > val)
        {
            tc = v[i];
            nt++;
        }
        else tc += v[i];
    }
    nt++;
    return nt <= k;
}

int main()
{
    int i;
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);
    scanf("%d%d", &n, &k);
    for(i = 0; i < n; i++)
        scanf("%d", v + i);
    int st = 1, dr = 16000 * 16000 + 1, mij;
    while(st < dr)
    {
        mij = (st + dr) / 2;
        if(calc(mij))
            dr = mij;
        else st = mij + 1;
    }
    mij = (st + dr) / 2;
    if(!calc(mij)) mij++;
    printf("%d", mij);
    return 0;
}