Cod sursa(job #1019673)

Utilizator bghimisFMI Ghimis Bogdan bghimis Data 31 octombrie 2013 19:07:15
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>
using namespace std;

ifstream cin ("transport.in");
ofstream cout("transport.out");

int n, k;
int v[16001];

bool verifica(int cantitate)
{
  int transporturi = 1; int marfa = 0;
  for (int i = 1; i <= n; ++i)
    {
      if (marfa + v[i] <= cantitate)
	marfa += v[i];
      else
	{
	  marfa = 0;
	  --i;
	  ++transporturi;
	}
    }
  
  if (transporturi <= k)
    return true;
  return false;
}

int binarySearch (int stanga, int dreapta)
{
  if (stanga > dreapta)
    return stanga;

  int mijloc = (stanga + dreapta) / 2;

  if (verifica (mijloc) == true)
    return binarySearch (stanga, mijloc - 1);
  else
    return binarySearch (mijloc + 1, dreapta);
}

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

  int suma = 0; int maxim = 0;
  for (int i = 1; i <= n; ++i)
    {
      cin >> v[i];
      suma += v[i];

      if (maxim < v[i])
	maxim = v[i];
    }

  cout << binarySearch (maxim, suma);

  return 0;
}