题目链接

题目描述

给定 nnn 种颜色的球,每种球有 aia_iai​ 个,对这些球执行以下操作:

  • 有顺序地任意取两个球,将第二个球涂上第一个球的颜色,重复该操作至所有球颜色相同。

求期望操作次数,对 109+710^9+7109+7 取模。
数据范围:n≤2500n\le 2500n≤2500,1≤ai≤1051\le a_i\le 10^51≤ai​≤105。

Solution

  • 设 fif_ifi​ 表示当前有 iii 个球,将所有球变为该颜色的期望次数,sss 表示球的总数,ppp 表示当前取出的两个球第一个与最终颜色相同,第二个与最终颜色不同的概率。
    根据题意,有 p=i×(s−i)s×(s−1)p=\frac{i\times(s-i)}{s\times(s-1)}p=s×(s−1)i×(s−i)​fi=p×fi−1+p×fi+1+(1−2p)×fi+vf_i=p\times f_{i-1}+p\times f_{i+1}+(1-2p)\times f_i+vfi​=p×fi−1​+p×fi+1​+(1−2p)×fi​+v其中 vvv 为这一步操作对最终答案的贡献,也就是该颜色成为最终颜色的概率。
  • 设 gig_igi​ 表示当前颜色成为最终颜色的概率,有 g0=0g_0=0g0​=0,g1=1g_1=1g1​=1,且 gi=p×gi−1+p×gi+1+(1−2p)×gig_{i}=p\times g_{i-1}+p\times g_{i+1}+(1-2p)\times g_igi​=p×gi−1​+p×gi+1​+(1−2p)×gi​。
    转化可得 gi−gi−1=gi+1−gig_i-g_{i-1}=g_{i+1}-g_{i}gi​−gi−1​=gi+1​−gi​,等差数列求和可得 gi=isg_i=\frac{i}{s}gi​=si​,即 v=isv=\frac{i}{s}v=si​。
  • 那么现在有fi=p×fi−1+p×fi+1+(1−2p)×fi+isf_i=p\times f_{i-1}+p\times f_{i+1}+(1-2p)\times f_i+\frac{i}{s}fi​=p×fi−1​+p×fi+1​+(1−2p)×fi​+si​转化后有fi−fi+1=fi−1−fi+s−1s−if_{i}-f_{i+1}=f_{i-1}-f_{i}+\frac{s-1}{s-i}fi​−fi+1​=fi−1​−fi​+s−is−1​
  • 考虑求 f1f_1f1​ 和 f2f_2f2​ 后线性递推,由于 f0f_0f0​ 不存在,代入后有 f2=2f1−1f_2=2f_1-1f2​=2f1​−1。
    f1=f1−fs=∑i=2sfi−1−fi=(s−1)×(f1−f2)+∑i=2s−1s−1s−i×(s−i)=(s−1)×(1−f1)+(s−1)×(s−2)\begin{aligned}f_1&=f_1-f_s\\ &=\sum_{i=2}^{s}{f_{i-1}-f_{i}}\\ &=(s-1)\times(f_1-f_2)+\sum_{i=2}^{s-1}{\frac{s-1}{s-i}\times(s-i)}\\&=(s-1)\times(1-f_1)+(s-1)\times(s-2)\end{aligned}f1​​=f1​−fs​=i=2∑s​fi−1​−fi​=(s−1)×(f1​−f2​)+i=2∑s−1​s−is−1​×(s−i)=(s−1)×(1−f1​)+(s−1)×(s−2)​
  • 所以f1=(s−1)2sf_1=\frac{(s-1)^2}{s}f1​=s(s−1)2​线性递推即可求解,答案为 ∑i=1nfai\sum_{i=1}^{n}{f_{a_{i}}}∑i=1n​fai​​。

Code

#include<cstdio>
using namespace std;
const int maxn=100010,MLY=1000000007;
int f[maxn],n,a[maxn],s,ans;
inline int power(int a,int b){int ans=1;while(b){if(b&1)ans=1ll*ans*a%MLY;a=1ll*a*a%MLY;b>>=1;}return ans;
}
int main(){scanf("%d",&n);for(int i=1;i<=n;++i)scanf("%d",&a[i]),s+=a[i];f[1]=(s-1ll)*(s-1)%MLY*power(s,MLY-2)%MLY;f[2]=(2ll*f[1]-1+MLY)%MLY;for(int i=2;i<100000;++i)f[i+1]=((2ll*f[i]-f[i-1]-(s-1ll)*power(s-i,MLY-2))%MLY+MLY)%MLY;for(int i=1;i<=n;++i)ans=(ans+f[a[i]])%MLY;printf("%d",ans);return 0;
}

[CF850F] Rainbow Balls相关推荐

  1. CF850F Rainbow Balls(数学、期望)

    解析 二倍相邻项,就要想裂项 纯数学题 一道黑色的小凯的疑惑 设总球数为 sss 我们先钦定一种颜色留到最后,那么其他颜色可以等价考虑 设 fif_{i}fi​ 为钦定的颜色的球有 iii 个,涂完需 ...

  2. 训练Rainbow算法需要1425个GPU Day?谷歌说强化学习可以降低计算成本

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 ©作者 | 陈萍.小舟 来源 | 机器之心 DeepMind 提出的 ...

  3. 例题6-6 小球下落(Dropping Balls, UVa 679)

    例题6-6 小球下落(Dropping Balls, UVa 679) 许多的小球一个一个的从一棵满二叉树上掉下来组成一个新满二叉树,每一时间,一个正在下降的球第一个访问的是非叶子节点.然后继续下降时 ...

  4. Rainbow的相关资料

    Rainbow的asp.net  2.0版本还没有正式发布,从他的代码库可看出来,asp.net 2.0的版本将是非常不错的一个产品. 官方网站:http://www.rainbowportal.ne ...

  5. AC日记——Red and Blue Balls codeforces 399b

    399B - Red and Blue Balls 思路: 惊讶的发现,所有的蓝球的消除都是独立的: 对于在栈中深度为i的蓝球消除需要2^i次操作: 代码: #include <cstdio&g ...

  6. HEU 4048 Picking Balls

     1/**//**************************************  2Problem: HEU 4048 Picking Balls  3Time: 0.0000 s  4M ...

  7. POJ 3687 Labeling Balls(拓扑序列)

    Labeling Balls   大意:n个重量分别为1-n的小球,给定一些小球间的重量关系. 在符合重量关系的前提下,先输出编号小的球. 思路:也是一道很简单的拓扑排序,不过要倒着来,注意一下要判重 ...

  8. 使用Rainbow tables和Ophcrack的组合工具破解Windows密码

    本文为寻找人生的起点 (http://blog.cn-ic.org)原创,如需转载,请注明出处,并保留原文链接 . 从前面的两篇文章(得到WindowsXP管理员权限的有效方法 ,John/bkhiv ...

  9. IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2) A. Bear and Three Balls 水题

    A. Bear and Three Balls 题目连接: http://www.codeforces.com/contest/653/problem/A Description Limak is a ...

最新文章

  1. mysql建立高效索引,如何知道你建立的MySQL索引是高效,合理的
  2. 数据结构与算法 / LRU 缓存淘汰算法
  3. 可执行jar包的MANIFEST.MF
  4. 对怀孕的人有害的食物。。。朋友们记住咯!(欢迎转载)
  5. Huawei LiteOS简介
  6. 一个关于文件中位运算的的处理函数。
  7. Android JNI学习(六)——Java与Native实战演习
  8. 原来在首席架构眼里MySQL果然如此不一样!
  9. bootstrap table 光标_第三章之Bootstrap 表格与按钮功能
  10. 近邻模块︱apple.Turicreate中相似判定Nearest Neighbors(四)
  11. Android开机画面显示
  12. 解决wineQQ不能输入中文
  13. 什么是云?云里雾里——最流行的云时代
  14. windows下ping端口
  15. 2020年短视频元年火爆来袭
  16. 基因检测-外显子链接问题
  17. 575. 分糖果【我亦无他唯手熟尔】
  18. python提示takes no arguments_Python创建实例时提示错误takes no arguments,找不到什么原因?...
  19. 官场直升机 鸿蒙笔著,担当和尚:老衲笔尖无墨水,要从空处想鸿蒙
  20. 【有限元分析】异型密封圈计算泄漏量与参数化优化过程(带分析源文件)

热门文章

  1. oracle 数字处理函数,Oracle函数-单行函数-数字、日期、日期处理函数
  2. linux raw设备格式化,SUSE Linux 10配置裸设备(raw devices)
  3. 7-8 数字三角形 (31 分)(思路+详解+动态规划)Come Baby!!!!!!!!!!!
  4. Leetcode周赛复盘——第 278 场力扣周赛
  5. [C++11]move资源的转移
  6. [C++11]通过using定义基础类型和函数指针别名
  7. LeetCode 142环形链表||-中等
  8. Honest Coach CodeForces - 1360B(简单贪心)
  9. SpringBoot自动装配源码解析
  10. Zookeepe实践与应用--分布队列