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\) で不足)。

アルゴリズム

  1. 入力 \(N, W, K\) を受け取る。
  2. \(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: