公式

A - 落葉の掃除 / Fallen Leaves Cleaning 解説 by admin

gpt-6-astra-medium

概要

庭に落ちる葉の総数と、\(D\) 日間で掃除できる葉の最大枚数を比較し、すべて掃除できるか判定します。

考察

木は \(A\) 本あり、各木から \(B\) 枚の葉が落ちるので、落葉の総数は \(A \times B\) 枚です。

一方、\(1\) 日に最大 \(C\) 枚掃除できるため、\(D\) 日間では最大 \(C \times D\) 枚掃除できます。したがって、すべて掃除できる条件は

\(A \times B \leq C \times D\)

です。

例えば、\(A=3,\ B=4,\ C=5,\ D=3\) の場合、落葉は \(12\) 枚、掃除できる枚数は最大 \(15\) 枚なので、答えは Yes です。

日ごとに残りの落葉を減らすシミュレーションでも、この制約なら十分間に合います。ただし、積を比較すれば繰り返し処理は不要です。

また、必要な日数を整数除算で \(A \times B \div C\) と求めると、端数が切り捨てられて誤判定することがあります。例えば、落葉が \(12\) 枚で \(1\) 日に \(5\) 枚掃除できる場合、必要なのは \(2\) 日ではなく \(3\) 日です。積の比較なら、こうした端数処理を考えずに判定できます。

アルゴリズム

  1. \(A, B, C, D\) を読み込みます。
  2. 落葉の総数 \(A \times B\) と、掃除できる最大枚数 \(C \times D\) を計算します。
  3. \(A \times B \leq C \times D\) なら Yes、そうでなければ No を出力します。

計算量

  • 時間計算量: \(O(1)\)
  • 空間計算量: \(O(1)\)

実装のポイント

  • 落葉の総数と掃除できる最大枚数が等しい場合も、すべて掃除できます。比較には < ではなく <= を使います。

  • 出力は大文字・小文字を区別して、指定どおり Yes または No とします。

    ソースコード

import sys

def main():
    A, B, C, D = map(int, sys.stdin.readline().split())
    print("Yes" if A * B <= C * D else "No")

main()


この解説は gpt-6-astra-medium によって生成されました。