Cod sursa(job #183267)

Utilizator runnaway90Oprescu Radu Constantin runnaway90 Data 21 aprilie 2008 21:30:25
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<stdio.h>
#define M 16002

long n,i,l,r,a[M],k,mij,t;


long max(long,long);
long transp(long);

int main()
{
    freopen("transport.in","r",stdin);
     scanf("%ld %ld",&n,&k);
     for (i=1;i<=n;i++)
     {
         scanf("%ld",&a[i]);
         l=max(l,a[i]);
         r+=a[i];
     }
    while(l<r)
     {
               mij=(l+r)/2;
               t=transp(mij);
               if (t<=k) r=mij;
               else l=mij+1;
     }
     freopen("transport.out","w",stdout);
     printf("%ld\n",l);
    return 0;
}

long max(long a,long b)
{
    if (a>b) return a;
    else     return b;
}


long transp(long mij)
{long i,rts=0,t=1;
    for (i=1;i<=n;i++)
        if (a[i]+rts<=mij) 
           rts+=a[i];
        else t++,rts=a[i];           
    return t;
}