显然只需要算出每个数比前面所有数大的期望然后全部加起来就好了,一个数的期望怎么算呢?

  对于一个数我们需要考虑比它大的数,因为比它小的数放它前面放它后面都可以,但是比它大的数只能放它后面。考虑大于等于它的数有n-i+1个,排列有(n-i+1)!种,但是它必须放在所有数的前面,也就是合法的排列只有(n-i)!种,那么期望(n-i)!/(n-i+1)!=1/(n-i+1)。

  于是总的期望为

  这是个调和级数,貌似可以用某个公式计算,但是这个时候可以祭出神器,分段打表!然后就AC了233

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=,inf=1e9;
int n;
double num[]={,16.69531137,17.38845852,17.79392362,18.08160569,18.30474924,18.48707079,18.64122147,18.77475286,18.89253590,18.99789641,19.09320659,19.18021797,19.26026068,19.33436865,19.40336152,19.46790004,19.52852466,19.58568308,19.63975030,19.69104359,19.73983376,19.78635377,19.83080553,19.87336515,19.91418714,19.95340786,19.99114818,20.02751583,20.06260715,20.09650870,20.12929852,20.16104722,20.19181888,20.22167184,20.25065938,20.27883026,20.30622923,20.33289748,20.35887296,20.38419077,20.40888338,20.43298094,20.45651143,20.47950095,20.50197381,20.52395271,20.54545892,20.56651233,20.58713161,20.60733432,20.62713695,20.64655504,20.66560323,20.68429536,20.70264450,20.72066301,20.73836258,20.75575433,20.77284876,20.78965588,20.80618518,20.82244570,20.83844604,20.85419440,20.86969859,20.88496606,20.90000394,20.91481902,20.92941782,20.94380656,20.95799119,20.97197744,20.98577076,20.99937641,21.01279943,21.02604466,21.03911674,21.05202014,21.06475917,21.07733795,21.08976047,21.10203056,21.11415192,21.12612812,21.13796257,21.14965861,21.16121944,21.17264813,21.18394769,21.19512099,21.20617082,21.21709989,21.22791081,21.23860610,21.24918821,21.25965951,21.27002229,21.28027880,21.29043117,21.30048150,21.31043183,21.32028413,21.33004030,21.33970222,21.34927167,21.35875041,21.36814015,21.37744254,21.38665920,21.39579168,21.40484152,21.41381019,21.42269914,21.43150976,21.44024344,21.44890151,21.45748525,21.46599594,21.47443481,21.48280306,21.49110186,21.49933236,21.50749567,21.51559288,21.52362505,21.53159322,21.53949840,21.54734158,21.55512372,21.56284577,21.57050864,21.57811324,21.58566044,21.59315112,21.60058609,21.60796620,21.61529224,21.62256500,21.62978525,21.63695374,21.64407121,21.65113837,21.65815595,21.66512462,21.67204506,21.67891794,21.68574390,21.69252359,21.69925762,21.70594661,21.71259115,21.71919184,21.72574924,21.73226392,21.73873643,21.74516732,21.75155712,21.75790635,21.76421552,21.77048513,21.77671568,21.78290765,21.78906152,21.79517774,21.80125679,21.80729910,21.81330513,21.81927530,21.82521003,21.83110975,21.83697487,21.84280579,21.84860291,21.85436662,21.86009729,21.86579531,21.87146105,21.87709487,21.88269712,21.88826817,21.89380835,21.89931800,21.90479747,21.91024707,21.91566714,21.92105799,21.92641993,21.93175328,21.93705833,21.94233539,21.94758474,21.95280669,21.95800151,21.96316948,21.96831087,21.97342598,21.97851504,21.98357835,21.98861614,21.99362868,21.99861622,22.00357901,22.00851730,22.01343131,22.01832130,22.02318748,22.02803011,22.03284940,22.03764557,22.04241885,22.04716945,22.05189759,22.05660348,22.06128733};
inline void read(int &k)
{
int f=;k=;char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(c<=''&&c>='')k=k*+c-'',c=getchar();
k*=f;
}
int main()
{
read(n);
double ans=num[n/];
for(;n%;n--)ans+=1.0/n;
printf("%.8lf",ans);
}

洛谷P1943 LocalMaxima_NOI导刊2009提高(1)(分段打表)的更多相关文章

  1. 洛谷 P1943 LocalMaxima_NOI导刊2009提高(1)

    我们先考虑第i大数,比它大的数有(n-i)个,显然要使i是Local Maxima,比它大的数必须放在它后面,那么它是Local Maxima的期望是: 那么n个数中Local Maxima个数的期望 ...

  2. luogu P1943 LocalMaxima_NOI导刊2009提高(1)

    又是有关于\(1-n\)排列的题,考虑从大到小依次插入构造排列 对于第\(i\)个数(也就是\(n-i+1\)),只有当它插在当前排列最前面时才会使那个什么数的个数+1,而在最前面的概率为\(\fra ...

  3. 洛谷P1800 software_NOI导刊2010提高(06)

    P1800 software_NOI导刊2010提高(06) 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术 ...

  4. 洛谷 P1800 software_NOI导刊2010提高(06)(二分答案+DP检验)

    P1800 software_NOI导刊2010提高(06) 标签 二分答案 难度 普及/提高- 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每 ...

  5. LocalMaxima_NOI导刊2009提高(1)

    先打表,发现\(ans=\sum_{i=1}^n\frac{1}{i}\) 对于小数据可以直接打表 数据很大时,精度相对就比较宽松 欧拉-马斯刻若尼常数=调和级数-自然对数 调和级数为:\(\sum_ ...

  6. 洛谷 P1800 software_NOI导刊2010提高(06)

    题目链接 题解 二分答案+dp 如果我们知道答案,贪心地想,让每个人做尽量多的模块一定不会比最优解差 \(f[i][j]\)表示前\(i\)个人第一个模块做了\(j\)块,第二个模块最多能做多少 然后 ...

  7. 洛谷-跑步-NOI导刊2010提高

    新牛到部队, CG 要求它们每天早上搞晨跑,从A农场跑到B农场.从A农场到B农场中有n-2个路口,分别标上号,A农场为1号, B农场为n号,路口分别为 2 ..n -1 号,从A农场到B农场有很多条路 ...

  8. 洛谷 P1950 长方形_NOI导刊2009提高(2)

    传送门 思路 首先定义\(h\)数组,\(h[i][j]\)表示第\(i\)行第\(j\)列最多可以向上延伸多长(直到一个被用过的格子) 然后使用单调栈算出 \(l_i\)和 \(r_i\) ,分别是 ...

  9. 洛谷 P1952 火星上的加法运算_NOI导刊2009提高(3)

    P1952 火星上的加法运算_NOI导刊2009提高(3) 题目描述 最近欢欢看到一本有关火星的书籍,其中她被一个加法运算所困惑,由于她的运算水平有限.她想向你求助,作为一位优秀的程序员,你当然不会拒 ...

随机推荐

  1. C、C++字符操作归总

    1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度 ...

  2. Gradle初使用

    我以前一直使用Maven来构建工程,这两天突然发现gradle也非常好用,记录一下自己使用gradle的过程. Gradle的下载与配置 本次选择下载的是gradle3.5版本,没选最新的gradle ...

  3. Windows下使用7-zip命令自动备份文件

    在上一篇博文中,介绍了使用WinRAR自动备份文件,后来改用了腾讯云服务器,上面默认没有安装WinRAR,只有7-zip,又不想在服务器上安装许多软件,就查了下7-zip的命令,贴出来备忘~ 系统环境 ...

  4. pyextend库-unpack列表集合字符串解包函数

    pyextend - python extend lib unpack (iterable, count, fill=None) 参数: iterable: 实现 __iter__的可迭代对象, 如 ...

  5. 多源最短路——Floyd算法

    Floyd算法 问题的提出:已知一个有向网(或者无向网),对每一对定点vi!=vj,要求求出vi与vj之间的最短路径和最短路径的长度. 解决该问题有以下两种方法: (1)轮流以每一个定点为源点,重复执 ...

  6. “Hello World!“”团队第五周召开的第二次会议

    今天是我们团队“Hello World!”团队第五周召开的第二次会议.也祝大家双十一快乐~~博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.todo list 六.会议照片 七 ...

  7. git中的重要指令

    git命令 任何操作都需要以 git 命令为开头 本地操作: git init 初始化一个本地仓库 新建为 master主分支 git status 查看当前分支状态 git add <文件名& ...

  8. C++:构造函数1——普通构造函数

    前言:构造函数是C+中很重要的一个概念,这里对其知识进行一个简单的总结 一.构造函数的定义 1.类中的构造函数名与类名必须相同 2.构造函数没有函数的返回类值型说明符 [特别注意]: a.构造函数的返 ...

  9. 2018软工实践—Alpha冲刺(3)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 协助后端界面的开发 搭建项目运行的服务器环境 ...

  10. CodeForces 154A Hometask dp

    题目链接: http://codeforces.com/problemset/problem/154/A 题意: 给你一个字符串,和若干模板串(长度为2),至少删除多少个字母,使得字符串的字串里面没有 ...