【BZOJ5146】有趣的概率

Description

"可爱的妹子就像有理数一样多,但是我们知道的,你在数轴上随便取一个点取到有理数的概率总是0,"芽衣在床上自顾自的说着这句充满哲理的话,"诶,柚子,我写完概率论的作业你就和我出去约会怎么样""好呀,但是你要做完才可以哦"柚子回答道,芽衣立刻从床上翻下来冲到了座位上,诶,就一道题啊,真好,题目是这样的:在一个圆上任取n个点,求由这n个点依次围成的凸n边形至少有一个锐角的概率是多少,芽衣急于和柚子去约会,当然没有心情想这一道题,于是她就来求助聪明的你啦。

Input

一个n,4<=N<=10000000000

Output

至少有一个锐角的概率,为了避免精度问题,对1e9+7取模

Sample Input

136865353

Sample Output

423626558

题解:思路比较简单,过程比较复杂的数学题。首先本题有两种统计方法,一种的点是无标号的,另一种的点是有标号的,显然二者答案相等,但是无标号的比有标号的恶心多了。。。不过由于本人比较sb采用了无标号的方法,所以这里先讲我的做法:

至少有一个锐角等价于存在一个点,他左右两个点之间夹的圆弧大于一个半圆。所以我们不妨设圆是由$S$个点组成的($S\rightarrow \infty$),那么我们先钦定一个角做锐角,再固定它左边的点不动,然后枚举剩下的那段圆弧的长度,便能得到某个角是锐角的概率:

$p_1={\sum\limits_{i=1}^{\frac S 2}(S-i)C_i^{n-3} \over C_S^{n-1}}$    ----(1)

运用一点组合知识,便能将这个式子化简到这个形式:$p_1={n\over 2^{n-1}}$。(如果你组合学得不好,本文最后会给出推导过程。)

有n个点,所以概率再乘上n,但是我们好像忽视了一个情况:圆内一个凸多边形可能有两个锐角!

所以我们把这个重复的部分去掉即可,由于两个锐角一定是相邻的,所以我们可以钦定某两个点是锐角,某对相邻的角全是锐角的概率是:

$p_2={\sum\limits_{i=1}^{\frac S 2}(\frac S 2-i)C_i^{n-2} \over C_S^{n-1}}$    ----(2)

推导过程类似,最后得到:$p_2=\frac 1 {2^{n-2}}$

所以最终答案就是:$(p_1-p_2)n=\frac {n(n-2)} {2^{n-1}}$。

如果用有标号的方法的话(Orz xqz),用微积分可以很快的解决问题(其实本质思想差不多),这里不给出式子了(其实是没学过)。

代码就不贴了。。。

推导过程↓↓↓

先声明,在后面的式子中,某些变量趋近于无穷,因此我会舍弃它们后面的常数项。具体过程如下:

首先解释(1),(2)式的含义。(1)式中,我们先固定了一个点A,然后选择了A在顺时针方向的后两个点B,C,接着枚举了剩下那段圆弧的长度i,其中B对应的角是锐角,i可以看作弧AC的长度。那么,B的位置可以在剩余S-i个点中任取,其余n-3个点可以在i个点中任取,所以就是$(S-i)C_i^{n-3}$。最后总方案数可以看成固定一个点,其余的点在S中任取,就是$C_S^{n-1}$。

我们将分子的(S-i)拆开处理,然后将S提出来。首先有$\sum\limits_{i=1}^m C_i^n=C_m^{n+1}$,因为这可以看成在m个物品中选n个,你枚举编号最大的那个物品的编号得到的结果。于是前一部分就变成$S\times C_{S\over 2}^{n-2}$。又因为$iC_i^n=(i+1)C_i^n=(n+1)C_i^{n+1}$,所以我们又可以套用前面的式子,那么后一部分就变成了$(n-2)\times C_{S\over 2}^{n-1}$。

继续化简:${S\cdot C_{S\over 2}^{n-2}-(n-2)C_{S\over 2}^{n-1}\over C_S^{n-1}}\\={{2\cdot {S\over 2}({S\over 2})!\over (n-2)!({S\over 2}-(n-2))!}-{(n-2)({S\over 2})!\over (n-1)!({S\over 2}-(n-1))!}\over{S!\over (n-1)!(S-(n-1))!}}\\={{2(n-1)({S\over 2})!\over (n-1)!({S\over 2}-(n-1))!}-{(n-2)({S\over 2})!\over (n-1)!({S\over 2}-(n-1))!}\over{S!\over (n-1)!(S-(n-1))!}}\\={n({S\over 2}!)(S-(n-1))!\over S!({S\over 2}-(n-1))!}\\={n\over 2^{n-1}}$

(2)式中,我们先固定了固定了一个点a,然后选择它在顺时针方向的下一个点b,要求a顺时针到b的这条圆弧大于一个半圆,接着枚举b到a这段劣弧的长度i,那么b可以在${S\over 2}-i$个点里选,剩余的点可以在i个点里选,这样就能保证角a和角b都是锐角了。方案数是$({S\over 2}-i)C_i^{n-2}$。推导过程略。

【BZOJ5146】有趣的概率 概率+组合数(微积分)的更多相关文章

  1. HDU 5001 概率DP || 记忆化搜索

    2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP  測 ...

  2. Hello 2019 D 素因子贡献法计算期望 + 概率dp + 滚动数组

    https://codeforces.com/contest/1097/problem/D 题意 给你一个n和k,问n经过k次操作之后留下的n的期望,每次操作n随机变成一个n的因数 题解 概率dp计算 ...

  3. [CSP-S模拟测试]:糊涂图(概率DP)

    题目传送门(内部题76) 输入格式 第一行输入三个空格隔开的整数$n,m,s$表示随机加一条边之前的糊涂图的点数,边数,以及起点的编号. 接下来$m$行,每行两个空格隔开的整数$a,b$表示从$a$到 ...

  4. 线性推概率——cf1009E好题!

    依次求每一段公里的期望消耗即可,这是可以递推的 dp[i]表示每公里的期望消耗 dp[i]=1/2*a1+1/4*a2 +...+1/2^(i-1)*ai-1 + 1/2^(i-1)*ai注意最后一项 ...

  5. 《x的奇幻之旅》:有趣的数学科普

    本书是相对比较少见的数学方面的科普书.从最简单的阿拉伯数字.加减法,一直到概率统计.微积分.群论.拓扑.微分几何,每个主题都用几千字做一些深入浅出的介绍.写的相当的有趣. 在书中又一次看到这个有趣的事 ...

  6. Codeforces Gym10081 A.Arcade Game-康托展开、全排列、组合数变成递推的思想

    最近做到好多概率,组合数,全排列的题目,本咸鱼不会啊,我概率论都挂科了... 这个题学到了一个康托展开,有点用,瞎写一下... 康托展开: 适用对象:没有重复元素的全排列. 把一个整数X展开成如下形式 ...

  7. CodeForces 352D. Jeff and Furik

    题意:给n个数,第一个人选取相邻两个递降的数交换顺序,第二个人一半的概率选取相邻两个递降的数交换顺序,一半的概率选取相邻两个递增的数交换顺序.两个人轮流操作,求整个数列变成递增数列所需交换次数的期望. ...

  8. 互联网,IT,大数据,机器学习,AI知识tag云

    互联网基础: tcp/ip网络,linux运维,DNS,ipv6 web前端: javascript, es6, 组件化开发, vuejs, angularjs, react html5, css3, ...

  9. Bzoj2038 小Z的袜子(hose)

    Time Limit: 20000MS   Memory Limit: 265216KB   64bit IO Format: %lld & %llu Description 作为一个生活散漫 ...

随机推荐

  1. UNIX环境编程学习笔记(27)——多线程编程(二):控制线程属性

    lienhua342014-11-09 1 线程属性概括 POSIX 线程的主要属性包括 scope 属性.detach 属性.堆栈地址.堆栈大小.优先级.在头文件 pthread.h 中定义了结构体 ...

  2. Linux 系统磁盘满处理方法

    1.使用find命令,找出占用空间较大的文件 find / -type f -size +5G   —找到大于5G的文件,有work权限的情况下可以使用 find . -type f -size +1 ...

  3. VBscript实现开机自动启动,自动复制原件后启动

    set fso = createobject("scripting.filesystemobject") set ws = createobject("wscript.s ...

  4. 文件流方式 删除prefab空脚本

    /// <summary> /// 删除一个Prefab上的空脚本 /// </summary> /// <param name="path"> ...

  5. phpstorm + x-debug 进行php调试

    参照http://www.cnblogs.com/tippoint/p/3429092.html 进行安装xdebug: 首先自己写一个打印php的页面,将phpinfo 拷贝到下面的框内进行分析. ...

  6. jenkins 忘记admin用户账号密码

    一不小心,忘记了admin用户的账号密码.然后就看不到manage jenkins的那部分内容了,看不到就改不了用户权限,也就是系统瘫痪了. 于是,想着开始没注册账号和密码的时候,都能看见,也就是没有 ...

  7. js中push()的用法

    定义和用法 push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度. 语法 arrayObject.push(newelement1,newelement2,....,newelement ...

  8. win7+ oracle +php环境的搭建

    http://blog.csdn.net/chchmlml/article/details/6887326 先下载个wmpp1.7.5(之前在xp上也是这个,所以就继续),安装,一切顺利,打开phpi ...

  9. RF中采用python方法获取当月1号、上月1号、下月1号、当前日期N天后日期、当前日期N天前日期、指定月份总天数、上个月份、下个月份、当月最后1天日期、上个月最后1天日期、下个月最后1天日期

    ${TodayDate} evaluate datetime.date.today().strftime('%Y%m%d') datetime ${CurrentMonthFirstDay} eval ...

  10. AliRedis单机180w QPS, 8台服务器构建1000w QPS Cache集群

    转自:http://www.open-open.com/lib/view/open1389880948758.html 引言:        如今redis凭借其高性能的优势, 以及丰富的数据结构作为 ...