Cod sursa(job #2288259)

Utilizator mihailescu_eduardMihailescu Eduard-Florin mihailescu_eduard Data 22 noiembrie 2018 23:31:55
Problema Transport Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>
#include <algorithm>
FILE *fin = freopen("transport.in","r",stdin);
FILE *fout = freopen("transport.out","w",stdout);


static const int NMAX = 16005;

int n,k, logN, maxi = -1;
int v[NMAX];


bool Check(int x)
{
    if(x < maxi)
        return false;
    int ct = 0, aux = x;
    for(int i = 1; i<= n; ++i)
    {
        if(aux - v[i] > 0)
            aux-=v[i];
        else if(aux - v[i] < 0)
        {
            ct++;
            aux=x;
            aux-=v[i];
        }
        else if(aux - v[i] == 0){
            ct++;
            aux = x;
        }
    }
    ct++;
    if(ct<=k)
        return true;
    return false;
}

int BinarySearch()
{
    int k = 0;
    for(int pas = logN; pas; pas >>=1)
    {
        
        if(!Check(pas+k))
            k+=pas;
    }
    return k+1;
}

void ReadInput()
{
    
    scanf("%d%d",&n,&k);
    for(int i= 1; i<= n; ++i)
    {
        scanf("%d",&v[i]);
        maxi = std::max(maxi,v[i]);
    }
    
    
}

int main()
{
    ReadInput();
    logN = 1 << 14;
    printf("%d",BinarySearch());

    return 0;
    
}