#include using namespace std; #define fst(t) std::get<0>(t) #define snd(t) std::get<1>(t) #define thd(t) std::get<2>(t) #define unless(p) if(!(p)) #define until(p) while(!(p)) using ll = long long; using P = std::tuple; const int dx[8] = {-1, 1, 0, 0, -1, -1, 1, 1}, dy[8] = {0, 0, -1, 1, -1, 1, -1, 1}; #include #include #include template struct Combination{ std::vector fact; Combination() = default; Combination(int max_n) { fact = std::vector(max_n); } Combination(Combination const &) = default; Combination(Combination&&) = default; Combination& operator=(Combination const &) = default; Combination& operator=(Combination&&) = default; T nCk(int n, int k){ if(n < k){return 0;} T res = 1; for(int i=n-k+1;i<=n;++i){ res *= i; } for(int i=1;i<=k;++i){ res /= i; } return res; } }; Combination combination(50); int main(){ std::cin.tie(nullptr); std::ios::sync_with_stdio(false); int F, N, K; std::cin >> F >> N >> K; double res = 0.0; for(int i=1;i<=F;++i){ for(int x=0;x<=K-1;++x){ for(int y=0;y<=N-K;++y){ int s = K - 1 - x, t = x + y + 1, u = N - K - y, a = F - i, b = i - 1; double v = 1. * i * combination.nCk(N, t) * pow(1. * a / F, s) * combination.nCk(N - t, u) * pow(1. / F, t) * pow(1. * b / F, u); res += v; } } } printf("%.10f\n", res); }