洛谷P1943 LocalMaxima_NOI导刊2009提高(1)(分段打表)
显然只需要算出每个数比前面所有数大的期望然后全部加起来就好了,一个数的期望怎么算呢?
对于一个数我们需要考虑比它大的数,因为比它小的数放它前面放它后面都可以,但是比它大的数只能放它后面。考虑大于等于它的数有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)(分段打表)的更多相关文章
- 洛谷 P1943 LocalMaxima_NOI导刊2009提高(1)
我们先考虑第i大数,比它大的数有(n-i)个,显然要使i是Local Maxima,比它大的数必须放在它后面,那么它是Local Maxima的期望是: 那么n个数中Local Maxima个数的期望 ...
- luogu P1943 LocalMaxima_NOI导刊2009提高(1)
又是有关于\(1-n\)排列的题,考虑从大到小依次插入构造排列 对于第\(i\)个数(也就是\(n-i+1\)),只有当它插在当前排列最前面时才会使那个什么数的个数+1,而在最前面的概率为\(\fra ...
- 洛谷P1800 software_NOI导刊2010提高(06)
P1800 software_NOI导刊2010提高(06) 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术 ...
- 洛谷 P1800 software_NOI导刊2010提高(06)(二分答案+DP检验)
P1800 software_NOI导刊2010提高(06) 标签 二分答案 难度 普及/提高- 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每 ...
- LocalMaxima_NOI导刊2009提高(1)
先打表,发现\(ans=\sum_{i=1}^n\frac{1}{i}\) 对于小数据可以直接打表 数据很大时,精度相对就比较宽松 欧拉-马斯刻若尼常数=调和级数-自然对数 调和级数为:\(\sum_ ...
- 洛谷 P1800 software_NOI导刊2010提高(06)
题目链接 题解 二分答案+dp 如果我们知道答案,贪心地想,让每个人做尽量多的模块一定不会比最优解差 \(f[i][j]\)表示前\(i\)个人第一个模块做了\(j\)块,第二个模块最多能做多少 然后 ...
- 洛谷-跑步-NOI导刊2010提高
新牛到部队, CG 要求它们每天早上搞晨跑,从A农场跑到B农场.从A农场到B农场中有n-2个路口,分别标上号,A农场为1号, B农场为n号,路口分别为 2 ..n -1 号,从A农场到B农场有很多条路 ...
- 洛谷 P1950 长方形_NOI导刊2009提高(2)
传送门 思路 首先定义\(h\)数组,\(h[i][j]\)表示第\(i\)行第\(j\)列最多可以向上延伸多长(直到一个被用过的格子) 然后使用单调栈算出 \(l_i\)和 \(r_i\) ,分别是 ...
- 洛谷 P1952 火星上的加法运算_NOI导刊2009提高(3)
P1952 火星上的加法运算_NOI导刊2009提高(3) 题目描述 最近欢欢看到一本有关火星的书籍,其中她被一个加法运算所困惑,由于她的运算水平有限.她想向你求助,作为一位优秀的程序员,你当然不会拒 ...
随机推荐
- 【Jmeter测试】如何使用BeanShell断言判断请求返回的Json相应结果
脚本结构上图中,queryMaterialApiDTOListByPkIds是返回Json格式响应结果的请求,然后添加BeanShell断言详细判断Json结果中的值是否正确. Json格式的相 ...
- appium+python自动化☞appium python api大全
整理了一些常用的appium python api,供学习使用...
- JMeter自学笔记1-环境安装
一.写在前面的话: Jmeter是一款优秀的开源测试工具, 是每位测试工程师进阶过程中,需要熟悉并掌握的一款测试工具,熟练使用Jmeter能大大提高工作效率. Jmeter环境安装需要依赖JDK,所以 ...
- 【数据结构系列】线段树(Segment Tree)
一.线段树的定义 线段树,又名区间树,是一种二叉搜索树. 那么问题来了,啥是二叉搜索树呢? 对于一棵二叉树,若满足: ①它的左子树不空,则左子树上所有结点的值均小于它的根结点的值 ②若它的右子树不空, ...
- mysql 5.5 zip配置安装
1.解压2.创建option文件 --defaults-file=../my.ini [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mys ...
- SPP-net论文总结
SPPNet方法来自<Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition> ,是大神 ...
- PowerDesigne 建立概念数据模型
本文主要介绍PowerDesigner概念数据模型以及实体.属性创建. 一.新建概念数据模型1)选择File-->New,弹出如图所示对话框,选择CDM模型(即概念数据模型)建立模型. 2)完成 ...
- 苹果没放弃手写笔 这样的iPad你想要吗?
12 月 31 日,美国专利与商标局(The U.S. Patent and Trademark Office)当地时间周四批准了一项来自苹果的专利申请,该专利主要描述的是一种可以通过陀螺仪.无线通讯 ...
- 第九次ScrumMeeting博客
第九次ScrumMeeting博客 本次会议于11月4日(六)22时整在3公寓725房间召开,持续20分钟. 与会人员:刘畅.辛德泰.窦鑫泽.张安澜.赵奕.方科栋. 1. 每个人的工作(有Issue的 ...
- 如何把node更新到最新的稳定版本
先装n,再用n把node升级到最新稳定版 $ npm install -g n $ n stable