题目分析:
我们令$G(x)$表示前$x$个点的平均深度,$F(x)$表示第$x$个点的期望深度。
有$F(x) = G(x-1)+1$,$G(x) = G(x-1)+\frac{1}{x}$
所以答案相当于一个调和级数和的前缀和,我们对小于1e6的暴力处理,大于1e6的利用欧拉常数做。
代码:
1 #include2 using namespace std; 3 4 const double euler = 0.57721566490153286060651209; 5 6 long long n; 7 8 int main(){ 9 while(scanf("%lld",&n) == 1){10 if(n <= 1e6){11 double ans = 0;12 for(int i=1;i<=n;i++) ans += (double)(n-i+1)/(double)i;13 ans /= n;14 printf("%.10lf\n",ans);15 }else{16 double hh = log(n)+euler;17 hh = hh*(n+1)-n;18 hh /= n;19 printf("%.10lf\n",hh);20 }21 }22 return 0;23 }