Cod sursa(job #2658124)

Utilizator cristi_macoveiMacovei Cristian cristi_macovei Data 13 octombrie 2020 12:14:46
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 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];
int mx, s;

void read () {
  in >> n >> k;
  for (int i=0; i<n; ++i) {
    in >> st[i];
    mx = std::max(mx, st[i]);
    s += 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 = mx, right = s, 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;
}