Cod sursa(job #1041617)

Utilizator mads2194FMI - Andrei Stroe mads2194 Data 25 noiembrie 2013 22:50:21
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <cstdio>
#include <algorithm>
#include <vector>

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

using namespace std;

int n,k;
int v[N],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;
    //v[0]=x;
    for(int i=1;i<n;++i)
    {
        scanf("%d",&x);
        sum[i]=sum[i-1]+x;
        //v[i]=x;
    }

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


    return 0;
}