公式
A - 果物の選別 / Fruit Sorting 解説 by admin
DeepSeek V3概要
糖度が\(K\)以上の果物のみを選び、その平均値を求める問題です。条件を満たす果物が1つもない場合は-1を出力します。
考察
この問題は、果物の糖度リストから条件を満たす要素を選び、その平均値を計算する単純なフィルタリング問題です。重要な点は以下の2つです:
- 条件判定: 各果物の糖度\(S_i\)が\(K\)以上かどうかを判定する
- 平均計算: 条件を満たす果物の糖度の合計と個数を保持し、平均値を計算する
素朴なアプローチとして、すべての果物を一度に読み込み、条件に合うものだけを選んで計算する方法が考えられます。制約条件から\(N\)は最大\(10^6\)まで可能ですが、単純な線形探索でも十分に処理できます。
アルゴリズム
- 入力から\(N\), \(K\), 糖度リスト\(S_1, S_2, ..., S_N\)を読み込む
- 合計値
totalと個数countを0で初期化 - 各糖度\(S_i\)について:
- \(S_i \geq K\)ならば、
totalに\(S_i\)を加算し、countを1増やす
- \(S_i \geq K\)ならば、
countが0ならば-1を出力- そうでなければ、
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 によって生成されました。
投稿日時:
最終更新: