Cod sursa(job #2698475)

Utilizator MihaiZ777MihaiZ MihaiZ777 Data 22 ianuarie 2021 11:27:28
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int v[16005];
int n, k;


bool goHigher(int mid)
{
  int sum = 0;
  int cont = k;

  for(int i = 0; i < n - 1; i++)
  {
    sum += v[i];

    if(sum > mid)
    {
      cont--;
      sum = v[i];
    }
    else if(sum == mid)
    {
      cont--;
      sum = 0;
    }
  }
  //if(sum < mid && sum != 0) { cont--; }
  sum += v[n - 1];
  if (sum > mid) { cont -= 2; }
  if (sum <= mid) { cont--; }

  //cout << mid << ' ' << cont << endl;
  return (cont < 0);
}


int binarySearch(int left, int right)
{
  int bestVal = -1;

  while(left <= right)
  {
    int mid = (left + right) / 2;

    if(goHigher(mid))
    {
      left = mid + 1;
    }
    else 
    { 
      bestVal = mid;
      right = mid - 1; 
    }
  }

  return bestVal;
}


int main() 
{
  fin >> n >> k;

  int min = 0, max = 0;

  for(int i = 0; i < n; i++)
  {
    fin >> v[i];
    if (v[i] > min) { min = v[i]; }
    max += v[i];
  }

  fout << binarySearch(min, max);

}