【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环境编程学习笔记(11)——文件I/O之文件时间以及 utime 函数

    lienhua342014-09-16 1 文件的时间 每个文件都有三个时间字段,如表 1 所示. 表 1: 文件的三个时间字段 说明 字段 st_atime 文件数据的最后访问时间 st_mtime ...

  2. 彻底搞清楚Java并发 (一) 基础

    多线程编程是为了让程序运行得更快,但是不是说,线程创建地越多越好,线程切换的时候上下文切换,以及受限于硬件和软件资源的限制问题 上下文切换 单核CPU同样支持多线程编程,CPU通过给每个线程分配CPU ...

  3. php解析mpp文件中的前置任务

    获取层级的project任务  参考 启动javabridge java -jar JavaBridge.jar SERVLET_LOCAL:8089 1.读取mpp文件 $file_path = & ...

  4. WebGL 绘制和变换

    1.使用缓冲区对象向顶点着色器传入多个顶点的数据,需要遵循以下五个步骤: 1.1 创建缓冲区对象(gl.createBuffer()). 1.2 绑定缓冲区对象(gl.bindBuffer()). 1 ...

  5. 【转】细谈Redis和Memcached的区别

    Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较: Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支 ...

  6. mysql主从复制-方案1

    mysql主机master 1. 编辑mysql配置文件my.cnf server_id = 1                     #server_id服务器唯一标识 log_bin = mys ...

  7. python 捕捉错误,exception,traceback和sys.exc_info()比较

    import traceback,sys import requests try : requests.get('dsdsd') ##故意让他出错 except Exception,e: print ...

  8. [OpenCV] Samples 03: kmeans

    注意Mat作为kmeans的参数的含义. 扩展:高维向量的聚类. 一.像素聚类 #include "opencv2/highgui.hpp" #include "open ...

  9. php中实现记住密码下次自动登录的例子

    这篇文章主要介绍了php中实现记住密码下次自动登录的例子,本文使用cookie实现记住密码和自动登录功能,需要的朋友可以参考下 做网站的时候经常会碰到要实现记住密码,下次自动登录,一周内免登陆,一个月 ...

  10. Mybatis -- 批量添加 -- insertBatch

    啦啦啦 ---------------InsertBatch Class : Dao /** * 批量插入perfEnvirons * * @author Liang * * 2017年4月25日 * ...