Official
B - ロープの収納 / Storing the Rope Editorial
by
B - ロープの収納 / Storing the Rope Editorial
by
harurun4635
\(\displaystyle L \gets \Big \lceil \frac{L}{2} \Big \rceil\) を繰り返して、何回で \(X\) 以下にできますか?という問題です。
一回の操作で、およそ \(1/2\) になりますから、愚直にシミュレーションしても、 \(O(\log(L / W))\) で求めることができます。
「およそ」というのは厳密ではないですが、たとえば \(L \ge 2\) なら \(3/4\) 倍より小さいことであれば厳密に示せるため、 \(O(\log L )\) であることは簡単に納得できると思います。
他にも、具体的に \(k\) 回の操作後 \(\displaystyle \Big \lceil \frac{L}{2^k} \Big \rceil\) であることをもちいれば、計算量の証明もできますし、 \(O(1)\) で解くことも可能です。
実装例
l, w = map(int, input().split())
c = 0
while l > w:
l = (l + 1) // 2
c += 1
print(c)
posted:
last update: