Official
A - 花壇の植え付け / Planting the Flower Bed Editorial by admin
GPT 5.2 High概要
両端に花を植え、残りも等間隔に並べたとき、その間隔が最小必要距離 \(K\) 以上になるかを判定する問題です。
考察
花壇の左端 \(0\) と右端 \(W\) にそれぞれ花を植え、全体で \(N\) 本を等間隔に並べると、隣り合う花の間隔は一意に決まります。
- 花が \(N\) 本あると、隣り合う区間(間隔)は全部で \(N-1\) 個あります。
- 全体の長さは \(W\) なので、等間隔配置での間隔は \( \frac{W}{N-1} \) になります。
必要条件は「この間隔が \(K\) 以上」であること、つまり \( \frac{W}{N-1} \ge K \) です。
ここで素朴に小数(浮動小数点)で \(\frac{W}{N-1}\) を計算して比較してもよいですが、浮動小数点誤差で境界付近の判定を誤る可能性があります(例:本当は等しいのに 0.999999… と評価されるなど)。
そこで不等式を整数のまま変形します: \( \frac{W}{N-1} \ge K \iff W \ge K(N-1) \) これなら整数比較だけで確実に判定できます。
例
- \(N=4, W=9, K=3\) のとき
必要な最小幅は \(K(N-1)=3\times 3=9\)。\(W=9\) なのでYes(間隔は \(9/3=3\))。 - \(N=4, W=8, K=3\) のとき
\(K(N-1)=9 > 8\) なのでNo(間隔は \(8/3 \approx 2.66\) で不足)。
アルゴリズム
- 入力 \(N, W, K\) を受け取る。
- \(W \ge K \times (N-1)\) なら
Yes、そうでなければNoを出力する。
計算量
- 時間計算量: \(O(1)\)
- 空間計算量: \(O(1)\)
実装のポイント
浮動小数点を使わず、\(W \ge K(N-1)\) の形にして整数比較すると安全です。
\(N-1\) が 0 になることは制約上ありません(\(N \ge 2\))。
ソースコード
import sys
def main():
N, W, K = map(int, sys.stdin.readline().split())
if W >= K * (N - 1):
print("Yes")
else:
print("No")
if __name__ == "__main__":
main()
この解説は gpt-5.2-high によって生成されました。
posted:
last update: