solution

期待値の線形性。$O(n)$。

ちょうど$k$面出して失敗する確率を$p(k)$、そのような時に得られる金額を$X(k)$とすると、答え\(\mathrm{ans} = \sum_i p(k) X(k)\)。 さらに$\le k$面出して失敗する確率$q(k)$を置けば$p(k) = q(k) - q(k - 1)$となり、これらは容易に求まる。

implementation

実装が汚ないのは迷走の結果

#include <bits/stdc++.h>
#define REP(i, n) for (int i = 0; (i) < int(n); ++ (i))
using namespace std;

int main() {
    int n; scanf("%d", &n);;

    vector<double> length_ge(n + 1);
    length_ge[0] = 1;
    REP (k, n) {
        length_ge[k + 1] = length_ge[k] * (n - k) / n;
    }

    double answer = 0;
    double e1 = (n + 1) / 2.0;
    REP (k, n + 1) {
        double length_eq = length_ge[k] * k / n;
        answer += length_eq * e1 * k;
    }

    printf("%.14lf\n", answer);
    return 0;
}