// Update probability distribution step by step, total runtime O(k*n*n). #include using namespace std; int main() { int n, i, k; cin >> n >> i >> k; vector h(n+1); for (int a = 1; a <= n; a++) { h[a] = h[a-1] + 1.0/a; } auto trans = [&](int a, int b) { double sum = a == b ? a-1 : 0; sum += h[n] - h[max(a,b)-1]; return sum/n; }; vector prob(n+1); prob[i] = 1; while (k--) { vector nprob(n+1); for (int a = 1; a <= n; a++) { for (int b = 1; b <= n; b++) { nprob[b] += trans(a,b) * prob[a]; } } swap(prob,nprob); } double E = 0; for (int a = 1; a <= n; a++) E += a*prob[a]; cout << fixed << setprecision(20) << E << endl; }