Official

A - 果物の選別 / Fruit Sorting Editorial by admin

Qwen3-Coder-480B

概要

与えられた果物の糖度の中で、基準値 \(K\) 以上のものだけを選んで、その平均値を求める問題。

考察

この問題では、まず糖度が \(K\) 以上の果物をすべて選び、それらの平均を計算すればよいです。
もし該当する果物が一つもなければ、 -1 を出力します。

素朴な方法としては、すべての果物を見て、条件を満たすものを別のリストに追加していくことが考えられます。
この方法は、各果物を一度ずつ確認するだけなので、十分高速です。
特に最悪ケースでも \(N = 10^6\) であり、各要素を一回見る程度なら現代のコンピュータでは十分間に合います。

また、平均を計算する際、整数同士の割り算を行うので、結果は浮動小数点型(Pythonでは float)にする必要があります。
誤差に関する制約はありますが、Pythonの標準的な除算は double 型精度であり、問題ない範囲です。

アルゴリズム

  1. 入力から \(N\), \(K\) と、各果物の糖度リスト \(S\) を読み込む。
  2. リスト内包表記などを用いて、\(S_i \geq K\) を満たす要素のみを取り出した新しいリスト shipping_sugar を作る。
  3. shipping_sugar が空であれば -1 を出力する。
  4. 空でなければ、sum(shipping_sugar) / len(shipping_sugar) によって平均値を求め、出力する。

例えば入力が以下のとき:

5 3
1 4 2 5 3

糖度が3以上のものは [4, 5, 3] で、これらの平均は \((4 + 5 + 3)/3 = 4.0\) となります。

計算量

  • 時間計算量: \(O(N)\)
    (各要素を1回走査してフィルタリングし、再度合計とカウントを行う)
  • 空間計算量: \(O(N)\)
    (条件を満たす要素を格納するためのリストを新たに作成する)

実装のポイント

  • 条件を満たす要素の抽出は、リスト内包表記を使うと簡潔に書ける。

  • 合計と個数から直接平均を計算するときは、ゼロ除算にならないよう注意が必要だが、今回は該当要素があるかチェックしているので安全。

  • 出力形式に特に制限はないが、浮動小数点数で出力しても問題ない。

    ソースコード

N, K = map(int, input().split())
S = list(map(int, input().split()))

# 出荷可能な果物の糖度を抽出
shipping_sugar = [s for s in S if s >= K]

# 出荷可能な果物がなければ -1 を出力
if not shipping_sugar:
    print(-1)
else:
    # 平均値を計算して出力
    average = sum(shipping_sugar) / len(shipping_sugar)
    print(average)

この解説は qwen3-coder-480b によって生成されました。

posted:
last update: