题意

传送门

有一袋 \(n\) 个颜色球,第 \(i\) 个颜色的球有 \(a_i\) 个。

当袋子里至少有两个不同颜色的球时,执行以下步骤:

  1. 一个接一个的按照顺序随机取出两个的球,这些球的颜色可能是一样的。

  2. 把第二个球涂成第一个球的颜色,然后把两个球放回袋子里。

所有这些动作只需要一秒钟。

输出无法操作时候的期望时间,对 \(10^9+7\) 取模。

\(n\le 2500,1\le a_i \le 10^5\)

题解

分别考虑每种颜色。那么设 \(f_i\) 表示当前颜色的球有 \(i\) 个,到没有其他颜色的球时的期望秒数。

设 \(s=\sum\limits_{i=1}^n a_i\),则 \(f_0=+\infty\),\(f_s=0\),\(\forall i \in (0,s),f_i=(f_{i-1}+f_{i+1})p_i+f_i(1-2p_i)+1\)。其中 \(p_i\) 为 \(\frac{i(s-i)}{s(s-1)}\)。

但因为有无穷,这是无法求的。我们需要避开 \(0\)。因为一旦进入 \(0\) 就出不来,所以所有从 \(i\) 到 \(s\) 的合法路径都是不经过 \(0\) 的。那么我们设 \(g_i\) 表示从 \(i\) 到 \(s\) 不经过 \(0\) 的概率,易得为 \(\frac{i}{s}\)。结合其实际意义,我们可以修改上式:\(f_0=f_s=0\),\(\forall i\in(0,s),f_i=(f_{i-1}+f_{i+1})p_i+f_i(1-2p_i)+\frac{i}{s}\)。注意,此时 \(f_0\) 没有实际意义,赋 \(0\) 仅为了运算方便。

此时若用高斯消元,复杂度为 \(O(n^3V^3)\),无法接受。将其化为更简单的形式:\(f_{i+1}-f_i=f_i-f_{i-1}-\frac{s-1}{s-i}\)。因为 \(f_0=0\),我们只需求出 \(f_1\) 即可。再结合 \(f_s=0\),有 \(f_1+\sum\limits_{i=1}^{s-1}f_{i+1}-f_i=sf_1-\sum\limits_{i=1}^{s-1}\frac{s-1}{s-i}s-i=sf_1-(s-1)^2=0\)。则 \(f_1=\frac{(s-1)^2}{s}\)。递推即可。复杂度 \(O(V\log P)\),瓶颈在求逆元。

此题关键在由 \(g\) 得出 \(f\) 的方程。非常巧妙地结合其实际意义。

CF850F 题解的更多相关文章

  1. CF850F Rainbow Balls 题解

    考虑最后变成哪一种颜色. 设 \(s = \sum\limits_{i=1}^n a_i\) 设现在有 \(k\) 种当前颜色, 需要全部变成该种颜色, 期望步数为 \(f_k\). 考虑状态转移.设 ...

  2. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  3. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  4. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  5. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  6. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  7. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  8. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  9. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  10. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. SAP 后台任务定时job

    定时任务的事务码 sm36:创建定时任务 sm37:查看定时任务 JDBG:后台任务debug,在对应的sm37中对应的job页面 t-code输入 创建定时任务SM36 名称可以随便起 一般都是按自 ...

  2. docker 创建 network 指定ip 段

    docker network create -d bridge --gateway 172.22.0.1 --subnet 172.22.0.0/16 zk_default

  3. 面试不愁,给你一份SpringBoot常用注解

    一.注解(annotations)列表 @SpringBootApplication: 包含了@ComponentScan.@Configuration和@EnableAutoConfiguratio ...

  4. Sql Sugar 使用

    sql sugar orm文档地址: SqlSugar ORM 5.X 官网 .文档.教程 - SqlSugar 5x - .NET果糖网 (donet5.com) sql sugar 基本用法大全, ...

  5. 升级grafana

    We recommend everyone to upgrade Grafana often to stay up to date with the latest fixes and enhancem ...

  6. C 数值类型与字节数组相互转化

    C 数据类型与字节数组相互转化 uint16_t -> bytes uint8_t uint16_t2bytes(uint8_t* buffer, uint16_t data) { if(buf ...

  7. ubuntu测网速speedometer

    下载安装speedometer sudo apt-get install speedometer 查询需要测速的网卡 ifconfig 测速 speedometer -rx enp2s0 执行效果图如 ...

  8. vue3.0学习笔记

    vue3转vue2: https://vue-next-template-explorer.netlify.app/ 1. Vue3.0六大两点 Performance:性能比Vue2.x快1.2~2 ...

  9. Delphi播放铃声

    两种方式: 一.简单直接 uses MMSystem; procedure TFmSound.playBtnClick(Sender: TObject); begin PlaySound(PChar( ...

  10. Python的入门学习Day 25~27——form”夜曲编程“

    Day 27 time: 2021.8.24. ​ 时流轻快,转眼间就载着我到达了学习Python的第27个日子.一开始,我还以为本次学习的全程对我而言小菜一碟--但,当我亲自走过以后,发现这些进步, ...