由于每条裙子被选中的概率相同,这点可以认为条裙子没有差异
那么定义为已经穿过条裙子,为了达到终止条件,期望还需要穿几次
意思是,选中穿过的裙子概率,选中没穿过的,然后本次也需要穿次裙子
那么化简得到
那么
上面提到每条裙子无差异,可以认为被穿过的次数相等,所以除以一个
每条裙子期望被穿过
不难发现这个时候只需要预处理这个调和级数的前缀和就可以知道每条裙子被穿过的期望次数
然后输出答案即可...
其实这是个经典的"邮票收集问题",知道就很好写啦
#include<bits/stdc++.h> using namespace std; const int maxn = 1e7 + 5; double f[maxn]; int main() { for(int i=1;i<=10000000;i++) f[i] = f[i-1] + 1.0/i; int T; cin>>T; while(T--) { int n; scanf("%d", &n); double ans = (n-1) * f[n] + f[n] * 10000; printf("%.7f\n", ans); } } /* author:Issue! */