D - Christmas Trees 解説
by
miscalculation53
便宜上、座標 \(A + kM\) に立っているクリスマスツリーを番号 \(k\) のクリスマスツリーと呼びます。番号 \(k\) のクリスマスツリーが高橋君と青木君の間に立っている条件は
\[L \leq A + kM \leq R\]
です。求めるものは、この条件を満たす整数 \(k\) の個数です。
条件を式変形すると
\[\begin{aligned} &\phantom{\iff} L \leq A + kM \leq R \\ &\iff \frac{L - A}{M} \leq k \leq \frac{R - A}{M} \\ &\iff \left\lceil \frac{L - A}{M} \right\rceil \leq k \leq \left\lfloor \frac{R - A}{M} \right\rfloor \end{aligned}\]
となります。ここで、実数 \(x\) に対し \(\lfloor x \rfloor\) は \(x\) 以下で最大の整数を、\(\lceil x \rceil\) は \(x\) 以上で最小の整数を意味します。
よって、条件を満たす \(k\) の個数は \(\displaystyle \max \left(0, \left\lfloor \frac{R - A}{M} \right\rfloor - \left\lceil \frac{L - A}{M} \right\rceil + 1\right)\) です。(今回の場合は単に \(\displaystyle \left\lfloor \frac{R - A}{M} \right\rfloor - \left\lceil \frac{L - A}{M} \right\rceil + 1\) としても正しいです)
実装においては、\(\displaystyle \left\lceil \frac{a}{b} \right\rceil = \left\lfloor \frac{a + b - 1}{b} \right\rfloor \: \)(\(a, b\) は整数、\(b > 0\))を利用すると簡潔に書けます。(公式解説にあるように、C++ 等での /
の仕様等には注意してください)
投稿日時:
最終更新: