[CF850F] Rainbow Balls
题目大意
题解
我们枚举最后剩下的球的种类,那么其他球可以看做没用了。
设选定的球有\(a_i\)个,球的总数为\(s=\sum_{i=1}^n a_i\)。
现在问题变为:在一个长度为\(s\)的数轴上,初始在\(a_i\),问在不到达\(0\)的前提下到达\(s\)的期望步数。
设\(p_i\)表示在\(i\)点,向前/后移动一步的概率,有:\(p_i = \frac{i(s-i)}{s(s-1)}\)。
可以列出一个比较显然的式子:
\[f_i = (1-2p_i) f_i + p_i f_{i-1} + p_i f_{i+1} + step_i\]
注意\(step_i = \frac{i}{s}\),为什么?
感性理解一下。
想象你有一张很大的图,有一些节点是终止节点。
现在你要从当前节点向某个后继节点走一步,要算到达任意一个终止节点的期望步数。
由于我们现在选定了一个终止节点。
那么假设走到了\(0\)号点,就相当于走到了去往另一个终止节点的路径。
不妨把这"1"步拆分成若干份,这若干份的和为\(1\),分开计算。
由于走到\(0\)就会走到另一条路径上去,所以每一份不妨设为不走到其它路径上的概率。
所以\(step_i\)为从\(i\)点出发,不走到\(0\)的条件下走到\(s\)的概率。
这是一个经典问题了,很容易得到\(step_i = \frac{i}{s}\)。
树上高消肯定是可以的,然而需要求逆复杂度为\(O((\sum a)logn)\)无法通过此题。
所以我们需要进一步深入。
带入\(step_i = \frac{i}{s}\),稍微变换后有:
\[f_i - f_{i+1} = (f_{i-1}-f_i) +\frac{s-1}{s-i}\]
所以可以得到:\(f_{i}-f_{i+1} = (f_1-f_2) + \sum_{j=2}^{i}\frac{s-1}{s-j}\)
那么有:
\[f_1 = \sum_{i=1}^{s-1} (f_i - f_{i+1}) = (s-1)(f_1-f_2)+\sum_{i=2}^{s-1}\sum_{j=2}^{i} \frac{s-1}{s-j}\]
而\(\sum_{i=2}^{s-1}\sum_{j=2}^{i} \frac{s-1}{s-j} = \sum_{i=2}^{s-1} (s-i) \frac{s-1}{s-i} =(s-2)(s-1)\)。
所以\(f_1 = (s-1)(f_1-f_2) + (s-2)(s-1)\)。
而由于\(f_0\)属于另一条路径,即不存在,故\(f_1 = (1-2p)f_1 +pf_2 + \frac{1}{s}\)。
化简有:\(2f_1 = f_2 + 1\),所以\(f_1 - f_2 = 1 - f_1\)。
所以有:
\[f_1 = (s-1)(1-f_1) +(s-2)(s-1)\]
解得\(f_1 = \frac{(s-1)^2}{s}\),即\(f_1-f_2 = 1-\frac{(s-1)^2}{s}\)
而我们知道\(f_{i}-f_{i+1}\)与\(f_{i-1}-f_i\)之间的关系,所顺次推出所有\(f_i\)即可。
答案\(ans = \sum_{i=1}^n f_{a_i}\),复杂度\(O(max(a)logn)\)。
[CF850F] Rainbow Balls的更多相关文章
- CF850F Rainbow Balls 题解
考虑最后变成哪一种颜色. 设 \(s = \sum\limits_{i=1}^n a_i\) 设现在有 \(k\) 种当前颜色, 需要全部变成该种颜色, 期望步数为 \(f_k\). 考虑状态转移.设 ...
- Codeforces554 C Kyoya and Colored Balls
C. Kyoya and Colored Balls Time Limit: 2000ms Memory Limit: 262144KB 64-bit integer IO format: %I64d ...
- 13 Balls Problem
今天讨论的是称球问题. No.3 13 balls problem You are given 13 balls. The odd ball may be either heavier or ligh ...
- Dapper学习 - Dapper.Rainbow(三) - Read
前面已经介绍了新增/修改/删除了, 接下来介绍一下Rainbow的Read方法. 一.Read -- Rainbow原生 1. 先看测试代码 var conStr = ConfigurationMan ...
- Dapper学习 - Dapper.Rainbow(二) - Update/Delete
上一篇介绍了Rainbow的Create方法, 这里就来介绍一下Update方法吧, 毕竟新增和修改是双胞兄弟嘛. 一.Update 1. 测试代码: var conStr = Configurati ...
- Dapper学习 - Dapper.Rainbow(一) - Create
Dapper这个ORM有许多扩展, 我自己用过两种, 也算是比较主流的两种, Rainbow和Extension, 这里就先介绍下Rainbow吧, 毕竟这个先用, 当然, 由于我使用的是mysql数 ...
- Angular中使用Rainbow
在使用js类库和框架的时候,大家都习惯于编写自己的使用示例,如果能将示例中的html,js和css 进行展示, 并进行高亮显示,效果会很棒,例如在html高亮显示jquery代码 上面的示例是使用ra ...
- Open judge C16H:Magical Balls 快速幂+逆元
C16H:Magical Balls 总时间限制: 1000ms 内存限制: 262144kB 描述 Wenwen has a magical ball. When put on an infin ...
- hduoj 4710 Balls Rearrangement 2013 ACM/ICPC Asia Regional Online —— Warmup
http://acm.hdu.edu.cn/showproblem.php?pid=4710 Balls Rearrangement Time Limit: 6000/3000 MS (Java/Ot ...
随机推荐
- CentOS7.2下配置SOCKS5代理
SOCKS介绍: 1.这里只做简单介绍. SOCKS5 是一个代理协议,它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Int ...
- MYSQL 表转 JavaBean 工具类
import org.apache.commons.lang.StringUtils; import java.io.BufferedWriter; import java.io.File; impo ...
- python破解网吧收费系统,远控网吧电脑设备!
我今天呢 , 我就没事跟着朋友喝酒喝酒啊.喝了很多啊.晚上到旁边的酒店开了一个房间,到了酒店才十点! 感觉没啥事情干的,那就去网吧走走看把,看到是一个嘟嘟牛的,和上次是一样的.还是照常用MS170 ...
- 笔试题——C++后序字符比较
题目:从两个数组的最后一个元素开始比较,输出数组中不同元素的个数.当一个数组的所有元素比较完成后,结束比较.a数组长度5,b数组长度3,a[ 4 ]和b[ 2 ]比较. 例: 输入: 77 21 1 ...
- flume handler
1.classpath classpath中需要这两项:Flume Agent configuration file and the second are the Flume client jars ...
- unload没有用
今天下午测试了unload这个事件包括beforeunload <script type="text/javascript"> window.addEventListe ...
- web06-PanduanLogin
电影网站:www.aikan66.com 项目网站:www.aikan66.com 游戏网站:www.aikan66.com 图片网站:www.aikan66.com 书籍网站:www.aikan66 ...
- Sqlite数据库初步的了解
转载与:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0714/1438.html 来自:泡在网上的日子. 和其他数据库一 ...
- servlet几个常用的方法
servlet继承了HTTPServlet所以可以重写父类的方法,下面一 一介绍方法Dopost DoGet 比较常用不再介绍. 一.Init(),和Init(ServletConfig config ...
- HTML和CSS <h1> --2-- <h1>
认识html文件基本结构 这一节中我们来学习html文件的结构:一个HTML文件是有自己固定的结构的. <html> <head>...</head> <bo ...