メモジャンボ

良い感じのブログタイトル募集中

二分探索(ABC 063 D問題)

バグらせまくった
問題
以下ネタバレ注意
  1. int N, A, B;
  2. int h[100010], x[100010];
  3.  
  4. //a÷b以上の最小の整数
  5. ll CEIL(ll a, ll b) {
  6. return (a + b - 1) / b;
  7. }
  8.  
  9. bool isOK(ll K) {
  10. ll cnt = 0;
  11. REP(i, N) {
  12. if (B*K < h[i]) {
  13. cnt += CEIL(h[i] - B * K, A - B);
  14. }
  15. }
  16. if (cnt <= K)return true;
  17. else return false;
  18. }
  19.  
  20. int binary_search() {
  21. int ng = -1;
  22. ll ok = 1000000001;
  23.  
  24. while (abs(ok - ng) > 1) {
  25. ll mid = (ok + ng) / 2;
  26.  
  27. if (isOK(mid)) ok = mid;
  28. else ng = mid;
  29. }
  30. return ok;
  31. }
  32.  
  33. int main() {
  34. cin >> N >> A >> B;
  35. REP(i, N) {
  36. cin >> h[i];
  37. }
  38.  
  39. ll ans = binary_search();
  40. cout << ans << endl;
  41. }