解析

二倍相邻项,就要想裂项

纯数学题
一道黑色的小凯的疑惑

设总球数为 sss
我们先钦定一种颜色留到最后,那么其他颜色可以等价考虑
设 fif_{i}fi​ 为钦定的颜色的球有 iii 个,涂完需要的期望次数
则有:
fi=(fi−1+fi+1)×p+fi×(1−2p)+wif_i=(f_{i-1}+f_{i+1})\times p+f_i\times (1-2p)+w_ifi​=(fi−1​+fi+1​)×p+fi​×(1−2p)+wi​
其中 ppp 表示有序取出两个不同色球的概率,wiw_iwi​ 表示有 iii 个球的颜色留到最后的概率。
不难发现 p=i(s−i)s(s−1)p=\dfrac{i(s-i)}{s(s-1)}p=s(s−1)i(s−i)​,考虑如何求 wiw_iwi​。
首先有: w0=0,ws=1w_0=0,w_s=1w0​=0,ws​=1。
和 fff 的转移类似的,有:wi=(wi−1+wi+1)×p+wi×(1−2p)w_i=(w_{i-1}+w_{i+1})\times p+w_i\times (1-2p)wi​=(wi−1​+wi+1​)×p+wi​×(1−2p)
化简移项,得:
wi+1−wi=wi−wi−1w_{i+1}-w_i=w_i-w_{i-1}wi+1​−wi​=wi​−wi−1​
也就是说 www 是一个等差数列,那么显然就有:
wi=isw_i=\frac{i}{s}wi​=si​
把 p,wp,wp,w 带回原来的转移式:
fi=(fi−1+fi+1)×i(s−i)s(s−1)+fi×(1−2i(s−i)s(s−1))+isf_i=(f_{i-1}+f_{i+1})\times \dfrac{i(s-i)}{s(s-1)}+f_i\times (1-\dfrac{2i(s-i)}{s(s-1)})+\frac{i}{s}fi​=(fi−1​+fi+1​)×s(s−1)i(s−i)​+fi​×(1−s(s−1)2i(s−i)​)+si​
化简,得:
2fi=fi+1+fi−1+s−1s−i2f_i=f_{i+1}+f_{i-1}+\frac{s-1}{s-i}2fi​=fi+1​+fi−1​+s−is−1​
也就是:
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​
把 i=1i=1i=1 带入,有:
f2=2f1+1f_2=2f_1+1f2​=2f1​+1
又有:
f1=f1−fs=∑i=2s(fi−1−fi)=(s−1)(f1−f2)+∑i=2s−1s−1s−i×(s−i)f_1=f_1-f_s=\sum_{i=2}^s(f_{i-1}-f_i)=(s-1)(f_1-f_2)+\sum_{i=2}^{s-1}\frac{s-1}{s-i}\times(s-i)f1​=f1​−fs​=i=2∑s​(fi−1​−fi​)=(s−1)(f1​−f2​)+i=2∑s−1​s−is−1​×(s−i)
后面那个和式是由于对于一个 s−1s−i\dfrac{s-1}{s-i}s−is−1​,它会产生 s−is-is−i 次贡献。
把 f2=2f1+1f_2=2f_1+1f2​=2f1​+1 带入,得到:
f1=(s−1)2sf_1=\frac{(s-1)^2}{s}f1​=s(s−1)2​
得到 f1f_1f1​ 之后,后面顺推即可。
过程中快速幂求逆元,时间复杂度 O(nlog⁡mod)O(n\log \bmod)O(nlogmod)。

代码

(式子推完代码几乎没有任何难度了…)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=2e5+100;
const int mod=1e9+7;
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
int n,m;inline ll ksm(ll x,ll k){ll res(1);while(k){if(k&1) res=res*x%mod;x=x*x%mod;k>>=1;}return res;
}
ll a[N];
ll s,f[N],mx;signed main() {#ifndef ONLINE_JUDGE//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);
#endifn=read();for(int i=1;i<=n;i++) a[i]=read(),s+=a[i],mx=max(mx,a[i]);f[1]=(s-1)*(s-1)%mod*ksm(s,mod-2)%mod;f[2]=(2*f[1]-1+mod)%mod;for(int i=2;i<mx;i++) f[i+1]=(2*f[i]-f[i-1]+mod-(s-1)*ksm(s-i,mod-2)%mod+mod)%mod;ll ans(0);for(int i=1;i<=n;i++) (ans+=f[a[i]])%=mod;printf("%lld\n",ans);return 0;
}
/*
*/

CF850F Rainbow Balls(数学、期望)相关推荐

  1. [CF850F] Rainbow Balls

    题目链接 题目描述 给定 nnn 种颜色的球,每种球有 aia_iai​ 个,对这些球执行以下操作: 有顺序地任意取两个球,将第二个球涂上第一个球的颜色,重复该操作至所有球颜色相同. 求期望操作次数, ...

  2. 概率论 —— 数学期望

    [概述] 在概率论和统计学中,一个离散型随机变量的数学期望是试验中每次可能结果的概率乘以其结果的总和. 在信息学竞赛中,期望值问题大多是求离散型随机变量的数学期望,如果 X 是一个离散的随机变量,输出 ...

  3. python 数学期望_python机器学习笔记:EM算法

    完整代码及其数据,请移步小编的GitHub 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/MachineLearningNote EM算法也称期望最大化 ...

  4. 218 扑克牌(数学期望)

    1. 问题描述: Admin 生日那天,Rainbow 来找 Admin 玩扑克牌.玩着玩着 Rainbow 觉得太没意思了,于是决定给 Admin 一个考验.Rainbow 把一副扑克牌(54 张) ...

  5. 《算法竞赛进阶指南》数论篇(3)-组合计数,Lucas定理,Catalan数列,容斥原理,莫比乌斯反演,概率与数学期望,博弈论之SG函数

    文章目录 组合计数 例题:Counting swaps Lucas定理 Cnm≡Cnmodpmmodp∗Cn/pm/p(modp)C_n^m\equiv C_{n\ mod\ p}^{m\ mod\ ...

  6. 随机变量的数字特征(数学期望,方差,协方差与相关系数)

    戳这里:概率论思维导图 !!! 数学期望 离散型随机变量的数学期望 (这里要求级数绝对收敛,若不绝对收敛,则E(X)不存在) 如果有绝对收敛,则有 ,其中 连续型随机变量的数学期望 (这里要求绝对收敛 ...

  7. 解题报告(一)F、(2018 ACM - ICPC shenyang I)Distance Between Sweethearts(数学期望 + 乘法原理 + FWT)(4.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  8. R语言:求二维变量数学期望

    想做一个二维变量数学期望实验, 查看若干资料终于找到方法 先看这篇文章熟悉一下R的函数 http://www.cyclismo.org/tutorial/R/tables.html 构造数据 通过下面 ...

  9. hdu 5419(数学期望)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5419 题解: 首先分母是C(m,3),考虑如何求出分子 考虑数学期望的独立性,我们首先可以用线性的时间 ...

最新文章

  1. 共识协议(8)NPOS提名权益证明
  2. 最近吸收的html CSS 知识
  3. 布局 线宽 间距 走线 泪滴 过孔 【快速提升PCB板Layout质量的6个细节】
  4. jacob 实现Office Word文件格式转换
  5. XML文件结构和基本语法
  6. hashmap put过程_阿里面试官:HashMap数据结构之道
  7. centos6.5 vncserver安装与配置
  8. mysql英文怎么发音_英文字母和汉语拼音先学哪个?科学答案在这里
  9. 什么是Csrss.exe进程?此进程有何作用?
  10. Java初级程序员面试中应该如何准备?一般公司对Java开发的要求有哪些?
  11. Spring Boot 应用在 kubernetes 的 sidecar 设计与实战
  12. Win11任务栏不显示时间怎么办?Win11任务栏不显示时间的解决方法
  13. 《OpenGL编程指南第7版》3视图
  14. win10系统安装jdk8,并且配置环境变量教程
  15. 客户关系管理 数据库设计案例
  16. 主题模型(LDA)案例:分析人民网留言板数据
  17. Android 异步进程
  18. 虹科QA | SWCF2022 12月6日演讲笔记:C波段卫星与5G之间的干扰排查及解决方案
  19. 百度地图之 添加遮罩层 去除百度地图logo
  20. 你了解吗?小游戏和H5小游戏不是一码事

热门文章

  1. 资料分享 | python机器学习教程分享来袭
  2. 网页设计的css样式,网页设计引入CSS样式的五种方式_css
  3. ab压力测试_Apache ab压力测试的知识点
  4. 算法设计与分析——贪心算法——最优装载问题
  5. leetcode367. 有效的完全平方数
  6. leetcode714.买卖股票的
  7. C++ 学习之旅(4)——调试Debug
  8. JS中this的应用场景,再了解下apply、call和bind!
  9. [MyBatisPlus]入门案例
  10. Java实现Huffman哈夫曼树(数组实现)