🔍

[鉄則B12] Equation

2024/05/04に公開

https://atcoder.jp/contests/tessoku-book/tasks/tessoku_book_ck

二分探索の考え方で値を絞っていく問題。

問題を要約する

  • x**3 + x して N になる x は?

問題を理解する

たとえば N = 3 なら x = 1.213836669921875 を求める。

N = 3
x = 1.213836669921875

答え合わせするなら x**3 + x してほぼ N なら合っている。

x**3 + x  # => 3.002302965426651

解説の模範解答風 (AC)

N = gets.to_i
l = 0.0
r = 100.0
x = nil
until (r - l) < 0.001
  x = (l + r) / 2               # x を調整していく
  v = x**3 + x
  if v > N
    r = x # 左半分に絞る
  else
    l = x # 右半分に絞る
  end
end

v = x**3 + x  # => 3.002302965426651
(N - v).abs   # => 0.0023029654266508714

p x           # => 1.213836669921875

絶対誤差が 0.001 以下になってないのに通るように見えるのは、おそらく誤差がある状態で x**3 をやってしまっているからで、ジャッジには関係しないのだと思われる。

Discussion