Cod sursa(job #829620)

Utilizator geniucosOncescu Costin geniucos Data 5 decembrie 2012 17:31:07
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<cstdio>
using namespace std;
int k,nr,s,p,u,m,i,n,maxi,a[16009];
int ok(int vol)
{
    nr=0;
    i=1;
    s=0;
    while(i<=n)
    {
        if(a[i]>vol) return 0;
        if(s+a[i]>vol)
        {
            nr++;
            s=0;
        }
        s=s+a[i];
        i++;
    }
    if(s!=0) nr++;
    if(nr>k) return 0;
    return 1;
}
int main()
{
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
scanf("%d",&n);
scanf("%d",&k);
for(i=1;i<=n;i++)
{
    scanf("%d",&a[i]);
    if(a[i]>maxi) maxi=a[i];
    s=s+a[i];
}
p=0;
u=s;
while(p<=u)
{
    m=(p+u)>>1;
    if(ok(m)==0) p=m+1;
    else
    {
        if(ok(m-1)==0)
        {
            printf("%d\n",m);
            return 0;
        }
        u=m-1;
    }
}
while(1)
return 0;
}