Cod sursa(job #1068293)

Utilizator gapdanPopescu George gapdan Data 28 decembrie 2013 10:56:56
Problema Transport Scor 20
Compilator cpp Status done
Runda prega_28_dec Marime 0.91 kb
#include<cstdio>
using namespace std;
int n,a[16005],mij,i,k,li,ls;
int next(int t, int r)
{
    int i,sum=0;
    for (i=t;i<=n;++i)
        {
            sum+=a[i];
            if (sum>r) return i-1;
        }
    return n;
}
int valid(int r)
{
    int i=1,o,nr=0;
    while (i<=n)
        {
            o=next(i,r);
            if (o<i) return 0;
            else ++nr, i=o+1;
        }
    if (nr<=k) return 1;
    else return 0;
}
int main()
{
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    scanf("%d%d",&n,&k);
    for (i=1;i<=n;++i)
        {
            scanf("%d",&a[i]);
            if (a[i]>ls) ls=a[i];
        }
    li=1;
     while (li<=ls)
        {
            mij=(li+ls)/2;
            int i=1,val,nr=0,e=0;
            if (valid(mij)==1) ls=mij-1;
                else li=mij+1;
        }
    printf("%d\n",ls+1);
    return 0;
}