Cod sursa(job #1525644)

Utilizator stefan_creastaStefan Creasta stefan_creasta Data 15 noiembrie 2015 12:43:46
Problema Transport Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <cstdio>
using namespace std;
int v[16005];

int main()
{
    int n,k,max=0;
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    scanf("%d%d",&n,&k);
    for(int i=0;i<n;++i)
    {
        scanf("%d",&v[i]);
        if(max<v[i])
            max=v[i];
    }
    if(k==n)
        printf("%d",max);
    else{
        int st=max;
        int dr=max*n;
        int pst=0,pdr=dr;
        while(st<=dr&&(pst!=st||pdr!=dr))
        {
            int i=0;
            max=(st+dr)/2;
            int nrd=0;
            while(i<n)
            {
                int sum=v[i];
                while(i<n&&sum<max)
                {
                    ++i;
                    sum+=v[i];
                }
                if(sum==max)
                    ++i;
                ++nrd;
            }
            pst=st;
            pdr=dr;
            if(nrd>k)
                st=max+1;
            else
                dr=max+1;
        }
        if(st<=dr)
            printf("%d",max);
        else
            printf("%d",st);
    }
    return 0;
}