Cod sursa(job #1782476)

Utilizator Dragne.Andrei11Dragne Andrei Dragne.Andrei11 Data 18 octombrie 2016 10:08:30
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
#define nmax 16001

using namespace std;

int v[nmax];
short n, k;
int cautari(int cap)
{
    int si=0, calatorie=1;
    for (int i=1; i<=n; i++)
    {
        if (cap>=si+v[i])
            si+=v[i];
        else
        {
            si=v[i];
            calatorie++;
        }
    }
    return calatorie;
}

int cautbin(int a, int b)
{
    int m=(a+b)/2;
    int rasp=n;
    while (a<=b)
    {
        int m=(a+b)/2;
        if (cautari(m)<=k)
        {
            rasp=m;
            b=m-1;
        }
        else a=m+1;
    }
    return rasp;
}

int main()
{
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);
    int s=0;
    int maxim=-1;

    scanf("%hd%hd", &n, &k);
    for(register short i=1;i<=n;i++)
    {
        scanf("%hd", &v[i]);
        s+=v[i];
        maxim=maxim<v[i]?v[i]:maxim;
    }
    printf("%d\n", cautbin(maxim, s));

    return 0;
}