Cod sursa(job #2658120)

Utilizator cristi_macoveiMacovei Cristian cristi_macovei Data 13 octombrie 2020 12:07:27
Problema Transport Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#include <iostream>

using namespace std;

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

const int NMAX = 16e3;

int n, k, st[NMAX];

void read () {
  in >> n >> k;
  for (int i=0; i<n; ++i)
    in >> st[i];
}

bool test (int cp) {
  int cnt = 0, c = 0;

  for (int i=0; i<n; ++i) {
    if (c + st[i] > cp) {
      ++cnt;
      c = st[i];
    } else
      c += st[i];
//    std::cout << "cnt: " << cnt << ", c: " << c << "\n";
  }
  ++cnt;

  return cnt <= k;
}

int search () {
  int left = 0, right = NMAX * NMAX, mid, last = -1;

  while (left <= right) {
    mid = (left + right) / 2;
    if (test(mid)) {
      right = mid - 1;
      last = mid;
    } else
      left = mid + 1;
  }

  return last;
}

int main() {
  read();
  out << search();
  in.close();
  out.close();
  return 0;
}