n
个房间 每个房间的钥匙随机放在某个房间内 概率相同 有
钥匙与门的对应关系呈现出环。打开一个门之后,环内的所有房间都可以进入。
问题就转化成了
n
个房间形成1~
题目还有一个特殊要求即,1号点不能单独成环。
所以答案就是
∑ki=1s(n,i)−s(n−1,i−1)n!
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
typedef long double ld;
const int N=25;
ld s[N][N],fac[N];
inline void Pre(int n){
s[0][0]=1;
for (int i=1;i<=n;i++){
s[i][0]=0;
for (int j=1;j<=i;j++)
s[i][j]=s[i-1][j-1]+s[i-1][j]*(i-1);
}
fac[0]=1; for (int i=1;i<=n;i++) fac[i]=fac[i-1]*i;
}
int main(){
int Q,n,K;
freopen("t.in","r",stdin);
freopen("t.out","w",stdout);
scanf("%d",&Q); Pre(20);
while (Q--){
ld ans=0;
scanf("%d%d",&n,&K);
for (int i=1;i<=K;i++)
ans+=s[n][i]-s[n-1][i-1];
ans/=fac[n];
printf("%.4lf\n",(double)ans);
}
return 0;
}