Cod sursa(job #1041644)

Utilizator mads2194FMI - Andrei Stroe mads2194 Data 25 noiembrie 2013 23:10:47
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>
#include <algorithm>
#include <vector>

#define N 16002
#define MAX_STEP (1<<15)

using namespace std;

int n,k;
int sum[N];

int binsearch(int x)
{
    size_t i,step;
    for(i=0,step=MAX_STEP;step;step>>=1)
    {
        if(i+step<n && sum[i+step]<=x)
            i+=step;
    }
    return i;
}

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

    //int n,k;
    scanf("%d %d\n",&n,&k);

    int x;
    scanf("%d",&x);
    sum[0]=x;
    for(int i=1;i<n;++i)
    {
        scanf("%d",&x);
        sum[i]=sum[i-1]+x;
    }

    int S = sum[n-1];
    int i,j,last;
    size_t step = MAX_STEP;
    i=S/k + (S%k>0);
    while(i+step>S) step>>=1;
    int best;
    for(;step;step>>=1)
    {
        last=0;
        for(j=0;j<k;++j)
        {
            last = sum[ binsearch(i+step+last) ];
        }
        if(last>=S)
        {
            best = i+step;
            //return 0;
        }
        else i+=step;
    }
    printf("%d",best);
    return 0;
}