[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 ...
随机推荐
- Log4j简单配置解析
log4j.rootLogger=ERROR, stdoutlog4j.logger.tk.mybatis.simple.mapper=TRACElog4j.appender.stdout=org.a ...
- Mysql读写分离——主从数据库+Atlas
mysql集群 最近在参加项目开发微信小程序后台,由于用户数量巨大,且后台程序并不是很完美,所以对用户的体验很是不友好(简单说就是很卡).赶巧最近正在翻阅<大型网站系统与Java中间件实践> ...
- 比较语义分割的几种结构:FCN,UNET,SegNet,PSPNet和Deeplab
简介 语义分割:给图像的每个像素点标注类别.通常认为这个类别与邻近像素类别有关,同时也和这个像素点归属的整体类别有关.利用图像分类的网络结构,可以利用不同层次的特征向量来满足判定需求.现有算法的主要区 ...
- NO.4:自学python之路------内置方法、装饰器、迭代器
引言 是时候开始新的Python学习了,最近要考英语,可能不会周更,但是尽量吧. 正文 内置方法 Python提供给了使用者很多内置方法,可以便于编程使用.这里就来挑选其中大部分的内置方法进行解释其用 ...
- [zabbix] zabbix从内部检测web页面
环境说明: 两台机器各运行一个tomcat实例,通过阿里云slb到后端,假设后端服务挂了一个,从外部访问整个服务还是可用的,所以需要从内部检测web页面. zabbix自带的web场景都是从外部检测w ...
- 利用Cocoapods创建基于SVN的私有库podspec
由于项目年后要进行组件化,考虑到公司内部实现的一些私有组件,不对外公开,而又想在不同项目中使用,该怎么办呢?由于cocoapods有了强大的功能,可以自己创建podspec,更可以设置私有的库.那么利 ...
- decode 函数及其用法
http://blog.csdn.net/oscar999/article/details/18399177
- Scrum Meeting 11.05
成员 今日任务 明日计划 用时 徐越 代码移植 学习ListView+simpleAdapter,actionBar.阅读并修改前端代码 4h 赵庶宏 服务器配置,代码移植 构建后端数据库,进行完善 ...
- 20145214《网络攻防》逆向及Bof基础实践
20145214<网络攻防>逆向及Bof基础实践 实践说明 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何 ...
- “Gogoing”改进方案
通过看见他们对我们团队的意见点评,我们还要有更多改善的地方. 首先,就是界面的优化: 其次,加上自己些特有的功能,吸引更多的用户: 然后,需要整理大量的数据库信息才能完善: 最后,需要有其他软件的集成 ...