公式

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

DeepSeek V3

概要

糖度が\(K\)以上の果物のみを選び、その平均値を求める問題です。条件を満たす果物が1つもない場合は-1を出力します。

考察

この問題は、果物の糖度リストから条件を満たす要素を選び、その平均値を計算する単純なフィルタリング問題です。重要な点は以下の2つです:

  1. 条件判定: 各果物の糖度\(S_i\)\(K\)以上かどうかを判定する
  2. 平均計算: 条件を満たす果物の糖度の合計と個数を保持し、平均値を計算する

素朴なアプローチとして、すべての果物を一度に読み込み、条件に合うものだけを選んで計算する方法が考えられます。制約条件から\(N\)は最大\(10^6\)まで可能ですが、単純な線形探索でも十分に処理できます。

アルゴリズム

  1. 入力から\(N\), \(K\), 糖度リスト\(S_1, S_2, ..., S_N\)を読み込む
  2. 合計値totalと個数countを0で初期化
  3. 各糖度\(S_i\)について:
    • \(S_i \geq K\)ならば、total\(S_i\)を加算し、countを1増やす
  4. countが0ならば-1を出力
  5. そうでなければ、total / countを計算し、小数点以下10桁まで出力

計算量

  • 時間計算量: \(O(N)\)
    • \(N\)個の要素に対して1回ずつ比較演算を行うため
  • 空間計算量: \(O(N)\)
    • 糖度リストを保持するためのメモリが必要

実装のポイント

  • 効率的な入力処理: 大量の入力データを効率的に処理するため、sys.stdin.read()を使用

  • 誤差対策: 平均値の出力には小数点以下10桁まで指定し、誤差要件を満たす

  • ゼロ除算回避: 条件を満たす果物が0個の場合を明示的にチェック

  • メモリ効率: 条件を満たす果物すべてを別リストに保存せず、合計と個数のみを保持することでメモリ使用量を最小化

    ソースコード

def main():
    import sys
    data = sys.stdin.read().split()
    n = int(data[0])
    K = int(data[1])
    S_list = list(map(int, data[2:2+n]))
    
    total = 0
    count = 0
    for s in S_list:
        if s >= K:
            total += s
            count += 1
            
    if count == 0:
        print(-1)
    else:
        average = total / count
        print("{:.10f}".format(average))

if __name__ == "__main__":
    main()

この解説は deepseekv3 によって生成されました。

投稿日時:
最終更新: