Cod sursa(job #740998)

Utilizator visanrVisan Radu visanr Data 25 aprilie 2012 08:19:51
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;

#define maxx 16001
#define nmax 200000000


int minim=nmax,v[maxx],n,k,s,start,end;


bool check(int capacity);


int main()
{
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    scanf("%i %i", &n,&k);
    for(int i=0;i<n;i++)
    {
            scanf("%i", &v[i]);
            minim=min(minim,v[i]);
    }
    start=minim, end=nmax;
    while(start<=end)
    {
                     int m=start+(end-start)/2;
                     if(check(m))
                     {
                                 s=m;
                                 end=m-1;
                     }else
                     {
                          start=m+1;
                     }
    }
    printf("%i\n", s);
    //int i;
    //scanf("%i", &i);
    return 0;
}

bool check(int capacity)
{
     int CurrentVolume=0,Transports=0;
     for(int i=0;i<n;i++)
     {
             if(CurrentVolume+v[i]<=capacity)
             {
                                             CurrentVolume+=v[i];
             }else
             {
                  CurrentVolume=v[i];
                  Transports++;
             }
     }
     if(CurrentVolume) Transports++;
     return Transports<=k;
}