Cod sursa(job #1415872)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 6 aprilie 2015 18:49:45
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <cstdio>
#define NM 16005

using namespace std;

int n, k, i, mx, v[NM];
int mid, sum, be, en;
bool ok;

bool verif (int cap)
{
    int sum = 0;
    int cnt = 0;

    // cap = 2
    // saltele: 1 1 3
    for (int i=1; i<=n; i++)
        if (sum + v[i] > cap)
        {
            cnt++;
            sum = v[i];

            if (v[i] > cap)
                return false;
        }
        else
            sum += v[i];

    cnt++;

    if (cnt <= k)
        return true;
    else
        return false;
}

int cautbin()
{
    be=1;
    en=NM*NM;
    int ans = NM*NM+1;

    while (be <= en)
    {
        mid = (be + en)/2;

        if (verif(mid) == true) // daca capacitatea e mid si pot sa transport toate in K transporturi (sau mai putine)
        {
            ans = mid;
            en = mid - 1;
        }
        else
            be = mid + 1;
    }

    return ans;
}

int main()
{
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);
    scanf("%d %d", &n, &k);
    for (i=1; i<=n; i++)
        scanf("%d", &v[i]);

    printf("%d\n", cautbin());

    return 0;
}