Cod sursa(job #677877)

Utilizator ioalexno1Alexandru Bunget ioalexno1 Data 10 februarie 2012 19:19:35
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <cstdio>
using namespace std;
const int nmax=16005;
int sol,a[nmax],sum,n,k;
void read()
{ int i;
freopen("transport.in","r",stdin); scanf("%d %d\n",&n,&k);
for(i=1;i<=n;++i)
    { scanf("%d\n",&a[i]); sum+=a[i]; }
fclose(stdin);
}
void binary_search()
{ int st,dr,mij,nr,s,i;
  bool e;
st=0; dr=sum;
while(st<=dr)
    {
    mij=(st+dr)/2;
    nr=0; s=0; e=true;
    for(i=1;i<=n;++i)
        {
        if(a[i]>mij)e=false;
        if(s+a[i]<=mij)s+=a[i];
            else {
                 ++nr; s=a[i];
                 }
        }
    if(s>0)++nr;
    if(e==false)st=mij+1;
    else {
    if(nr<=k){
             sol=mij;
             dr=mij-1;
              }
    else st=mij+1;
        }
    }
}
int main()
{
sum=0;
read();
sol=0;
binary_search();
freopen("transport.out","w",stdout); printf("%d",sol); fclose(stdout);
return 0;
}