Cod sursa(job #814809)

Utilizator NastureNasture Anca Nasture Data 16 noiembrie 2012 09:29:27
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<stdio.h>
int v[16001];
int main(){
    int k,i,n,s,sum,pp,cap,l1,l2,max,ma,nr;
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    scanf("%d%d",&n,&k);
    sum=0;
    max=0;
    for(i=1;i<=n;i++){
        scanf("%d",&v[i]);
        if(v[i]>max)
            max=v[i];
        sum+=v[i];
    }
    ma=sum/k;
    if(ma>=max){
        l1=ma;
        l2=sum;
    }
    else{
        l1=max;
        l2=sum;
    }
    l1--;
    l2++;
    pp=0;
    while(l2-l1>=0&&pp==0){
        cap=l1+(l2-l1)/2;
        nr=1;
        s=0;
        for(i=1;i<=n;i++)
            if(s+v[i]<=cap)
                s+=v[i];
            else{
                nr++;
                s=v[i];
            }
        //if(nr==k)
          //  pp=cap;
        //else
            if(nr<=k)
                l2=cap-1;
            else
                l1=cap+1;
    }
    if(cap<max)
        cap=max;
    if(cap>sum)
        cap=sum;
   /* pp=1;

    int ccap=cap;
    while(pp==1&&ccap>1){
        ccap--;
        nr=1;
        s=0;

        for(i=1;i<=n;i++)
            if(s+v[i]<=ccap)
                s+=v[i];
            else{
                nr++;

                s=v[i];
            }
        if(k==nr)
            cap=ccap;
        else
                pp=0;
    }
    */
          printf("%d",cap);

    return 0;
}