Cod sursa(job #611846)

Utilizator crushackPopescu Silviu crushack Data 3 septembrie 2011 20:28:57
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <stdio.h>
#define NMax 16010
const char IN[]="transport.in",OUT[]="transport.out";

int N,K;
int a[NMax];

bool test(int x)
{
    int i,ct=1,sum=0;

    for (i=0;i<N;++i)
    {
        if ( sum+a[i]<=x )
            sum+=a[i];
        else
            ++ct,sum=a[i];
    }
    return ct<=K;
}

int search(int L)
{
    int i,step;
    for (step=1;step<L;step<<=1);
    for (i=L;step;step>>=1)
        if (i-step>=0 && test(i-step))
            i-=step;
    return i;
}

int main()
{
    int i,sum=0;
    freopen(IN,"r",stdin);
    scanf("%d%d",&N,&K);
    for (i=0;i<N;++i) scanf("%d",a+i),sum+=a[i];
    fclose(stdin);

    freopen(OUT,"w",stdout);
    printf("%d\n",search(sum));
    fclose(stdout);
    return 0;
}