Cod sursa(job #1216078)

Utilizator ZenusTudor Costin Razvan Zenus Data 3 august 2014 11:15:27
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cstdio>
#include <algorithm>

using namespace std;

#define NMAX 20000

int left,right,mid,N,K,final,i;
int A[NMAX];

bool transport(int cantitate)
{
    int i,current=0,curse=0;

    for (i=1;i<=N;++i)
    {
        if (A[i]>cantitate)
        return false;

        if (current+A[i]>cantitate)
        {
            ++curse;
            current=0;
        }
        current+=A[i];
    }

    ++curse;

    return (curse<=K);
}

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",&A[i]);

    left=(i==1) ? A[i] : min(left,A[i]);
    right+=A[i];
}

while (left<=right)
{
    mid=(left+right)>>1;

    if (transport(mid))
    {
        final=mid;
        right=mid-1;
        continue;
    }

    left=mid+1;
}

printf("%d\n",final);

return 0;
}