公式

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


初心者の方へ

この問題は、for 文を使うなどして「糖度が \(K\) 以上の果物がいくつあるか」と「糖度が \(K\) 以上の果物の糖度の合計はいくつか」を求め、それらをもとに平均値を計算することで解くことができます。

果物の個数と糖度の合計はいずれも倍精度浮動小数点数として正確に表すことができるので、合計を個数で割った値として平均値を求めると相対誤差が \(10 ^ {-15}\) 以下になることが示せます。 この値を十分な精度で出力することで、この問題に正解することができます。

実装例は以下のようになります。

#include <iostream>
#include <iomanip>

int main() {
    using namespace std;
    int N, K;
    cin >> N >> K;

    // 糖度が K 以上の果物の
    long sum = 0; // 糖度の合計
    int count = 0; // 個数
    for (int i = 0; i < N; ++i) {
        int A;
        cin >> A;
        if (A >= K) { // 糖度が K 以上なら
            sum += A; // 糖度の合計に足して
            count += 1; // 個数を 1 増やす
        }
    }
    if (count == 0) { // 1 つもなければ
        cout << "-1" << endl; // -1
    } else { // あったら
        cout << setprecision(10); // 出力桁数を設定して
        cout << sum * 1.0 / count << endl; // 平均を出力
    }
    return 0;
}
N, K = map(int, input().split())

# 糖度が K 以上の果物の
sum = 0 # 糖度の合計
count = 0 # 個数
for A in map(int, input().split()):
    if A >= K: # 糖度が K 以上なら
        sum += A # 糖度の合計に足して
        count += 1 # 個数を 1 増やす

if count == 0: # 1 つもなければ
    print(-1) # -1
else: # あったら
    print(sum / count) # 平均を出力

投稿日時:
最終更新: