Cod sursa(job #2333133)

Utilizator Radu_FilipescuFilipescu Radu Radu_Filipescu Data 31 ianuarie 2019 18:33:33
Problema Transport Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>

using namespace std;

ifstream fin( "transport.in" );
ofstream fout( "transport.out" );

const int NMAX = 16005;
const int INF = 2000000000;

int N, K;
int val[NMAX];

void Read()
{
  fin >> N >> K;

  for( int i = 1; i <= N; ++i )
    fin >> val[i];

  fin.close();
}

bool Check( int cap )
{
  int trucks = 0;
  int curent;

  for( int i = 1; i <= N; ++i )
  {
    curent = 0;
    while( curent + val[i] <= cap && i <= N )
    {
      curent += val[i];
      ++i;
    }

    trucks++;
    i--;

    if( trucks > K ) return false;
  }

  return true;
}

int BinaraBlana( int lf, int rg )
{
  if( lf > rg ) return INF;

  int mid = ( lf + rg ) / 2;

  if( Check( mid ) ) return min( mid, BinaraBlana( lf, mid - 1 ) );
  else return BinaraBlana( mid + 1, rg );
}

void Do()
{
  int lf = 1, rg = 10000, mid;
  int ans;

  ans = BinaraBlana( 1, 10000 );

  fout << ans << '\n';
}

int main()
{
    Read();
    Do();

    return 0;
}