前言
期望的广义定义:一次随机抽样中所期望的某随机变量的取值。
一个例子:
一次考试满分 100pts,有 0.5 的概率考 90pts,0.3 的概率考 80pts,0.2 的概率考 50pts,则这次考试成绩的期望即为 0.5×90+0.3×80+0.2×50=79pts。
与 加权平均值 类似。
P8774 爬树的甲壳虫
Problem Link
Explanation
有一只甲壳虫想要爬上一颗高度为 n 的树,它一开始位于树根,高度为 0,当它尝试从高度 i−1 爬到高度为 i 的位置时有 Pi 的概率会掉回树根,求它从树根爬到树顶时,每次尝试花费 1 个单位时间,求经过的时间的期望值是多少。
Solution
设 fi 表示从 i 到树顶 n 所花费时间的期望值。
接下来考虑转移,如果这次尝试成功,其期望为 (1−pi+1)fi+1。如果这次尝试失败,回到树根,则其期望为 pi+1f0。
转移方程为:
fi=1+(i−pi+1fi+1)+pi+1f0
观察转移方程,发现其中 f0 和 fi+1 项是未知的。考虑倒推,可以求出 fi+1,但无论如何都无法求 f0,故多写几项寻找规律:
f0=1+(i−p1f1)+p1f0f1=1+(i−p2f2)+p2f0f2=1+(i−p3f3)+p3f0
此时即可直接解方程,进行带入,展开后为:
f0=1+(1−p1)+(1−p1)(1−p2)f2+[p1+(1−p1)p2]f0
因为题意中 fn=0,所以原式化简为:
f0=1+(1−p1)+[p1+(1−p1)p2]f0
将其表示为 f0=A+B 形式,则可以进行对应:
A=1+(1−p1)+(1−p1)(1−p2)+⋯+(1−p1)(1−p2)⋯(1−pn−1)B=p1+p2(1−p1)+p3(1−p1)(1−p2)+⋯+pn(1−pn)⋯(1−pn−1)
A,B 都可以直接计算,则本题解决。
另外注意到数据要求输出 bamodP 的结果,需要用到乘法逆元,由于 P 为质数,可以直接通过费马小定理求出。
Core Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| ll ksm(ll x,ll y) { ll res=1; while(y) { if(y&1) res=res*x%mod; x=x*x%mod; y>>=1; } return res; } int main() { n=read(); for(int i=1;i<=n;i++) { int a=read(),b=read(); p1[i]=a*ksm(b,mod-2)%mod; p2[i]=(b-a)*ksm(b,mod-2)%mod; } A=1; ll t=1; for(int i=1;i<=n;i++) { if(i!=n) A=(A+p2[i]*t%mod)%mod; B=(B+p1[i]*t%mod)%mod; t=(p2[i]*t)%mod; } write(A*ksm((1-B+mod)%mod,mod-2)%mod); return 0; }
|