Cod sursa(job #1608465)

Utilizator DanBrezeanuBrezeanu Dan DanBrezeanu Data 22 februarie 2016 09:16:58
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>

using namespace std;

int n,k,bg,ed,m;
vector<int>v;

bool Accesible(int value)
{
    int sum=0,trips=0;
    for(size_t i=0;i<v.size();++i)
    {
        if(sum+v[i] <= value)
            sum+=v[i];
        else
        {
            trips++;
            if(trips > k)
                return 0;
            sum=v[i];
        }
    }
    trips++;
    if(trips > k)
        return 0;
    else
        return 1;
}

/*void BinarySearch(int bg,int ed)
{

    int m = (bg+ed)/2;

    if(Accesible(m))
    {
        if(bg >= m-1)
        {
            printf("%d",m);
            return;
        }

        BinarySearch(bg,m-1);
    }
    else
        BinarySearch(m+1,ed);

}*/

int main()
{
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);

    int x,ed0=0,value,bg0=0;

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

    for(int i=1;i<=n;++i)
    {
        scanf("%d",&x);
        ed0 += x;

        if(bg0 < x)
            bg0 = x;

        v.push_back(x);
    }

    //BinarySearch(1,ed0);
    bg=bg0;
    ed=ed0;

    while(bg <= ed)
    {
        m = (bg + ed)/2;
        if(Accesible(m))
        {
            ed = m - 1;
            value = m;
        }
        else
            bg = m + 1;
    }

    printf("%d",value);

    return 0;

}