Cod sursa(job #1415824)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 6 aprilie 2015 16:19:20
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#include <cstdio>
#define NM 16005

using namespace std;

int n,k,i,mx,v[NM];
int sum,sum2,nr,nr2;
int mid,mid2,be,en;

int main()
{
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);
    scanf("%d %d", &n, &k);
    for (i=1; i<=n; i++)
    {
        scanf("%d", &v[i]);
        mx=max(mx, v[i]);
        sum+=v[i];
    }
    sum/=k;
    be=max(sum, mx);
    en=NM*NM;
    while (be<=en)
    {
        mid=(be+en) / 2;
        mid2=mid-1;
        nr=nr2=1;
        sum=sum2=0;
        for (i=1; i<=n; i++)
        {
            if (sum+v[i]>mid)
            {
                nr++;
                sum=v[i];
            }
            else
              sum+=v[i];
            if (sum2+v[i]>mid2)
            {
                nr2++;
                sum2=v[i];
            }
            else
              sum2+=v[i];
        }
        if (nr>=k && nr2<k)
          break;
        else
        {
            if (nr>=k)
              be=mid+1;
            else
              en=mid-1;
        }
    }
    printf("%d\n", mid);
    return 0;
}