我们先考虑第i大数,比它大的数有(n-i)个,显然要使i是Local Maxima,比它大的数必须放在它后面,那么它是Local Maxima的期望是;
那么n个数中Local Maxima个数的期望就是,即为,这个就是调和级数。
为了避免超时,再用分段打表的特殊姿势即可
正式代码(略去一堆赋值)
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 const int maxn=10000000; 5 long long n,m; 6 double a[1000],ans; 7 int main(){ 8 scanf("%lld",&n); 9 int y=n/maxn; 10 ans+=a[y]; 11 for (long long i=maxn*y+1;i<=n;i++) ans+=1.0/i; 12 printf("%.8f",ans); 13 return 0; 14 }