Cod sursa(job #1309014)

Utilizator obidanDan Ganea obidan Data 5 ianuarie 2015 05:53:19
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>
using namespace std;
const int NMax = 16000;

int S[NMax];
int n,k;
long long int VolMinim;

bool CanDo(long long  m)
{
  long long  int q=1,i,sum=0;
    for(i=1;i<=n;i++)
    {
        if(S[i] > m) return 0;
        if(sum + S[i] <= m)sum = sum + S[i];
        else
        {
            q++; sum = 0;
            i--;
        }
    }
    if(q <= k ) return 1;
    return 0;

}

void CautBin()
{
    long long int lo = 0, hi = 256000001;
    long long int m;
    while(hi - lo > 1)
    {
        m = (lo + hi)/2;
        if(CanDo(m))
        {
            //if(m==8) {cout<< lo << " "<< hi ;}
            hi = m+1;
          // if(VolMinim > m) VolMinim = m;
        }
        else
        {
            lo = m+1;
        }
    }
    VolMinim = lo;


}


int main()
{
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    cin>>n>>k;
    for(int i=1;i<=n;i++)
        cin>>S[i];
    VolMinim = 18000;
    CautBin();
    cout<<VolMinim;


}