Problem
题目大意:抛一次硬币有$p$的概率得到正面,当有$n$次正面时停止,抛第$i$次的花费为$2i-1$,求抛的期望次数和期望花费
Solution
本来做这题就是想巩固一下期望方面的东西,可能有点拓展
第一问比较明显,设$f_i$表示抛掷了$i$次时的期望天数,依题意有:
$f_i=p\cdot f_{i-1}+(1-p)\cdot f_i+1$
解释一下,对于抛一次,有$p$的概率正面,只要再抛$f_{i-1}次即可$,所以加上$p\cdot f_{i-1}$,有$1-p$的概率反面,则仍要抛$f_i$次,所以加上$(1-p)\cdot f_i$,再加上这次抛掷的一次,我们就得到了有$i$次正面时天数的期望
上面的式子移项消掉,得到$f_i=f_{i-1}+\frac 1p$,即$f_i=\frac ip$
第二问有点意思,设$E_i$表示抛掷了$i$次正面时的期望花费,仿照上面的式子写出:
$E_i=p\cdot E_{i-1}+(1-p)\cdot E_i+2f_i-1$
式子解释和上面一样,只是抛掷的成本变为了$2f_i-1$
同样化简,$E_i=E_{i-1}+\frac {2i}{p^2}-\frac 1p$,求和可得$E_i=\frac {(1+n)n}{p^2}-\frac np$
至于为什么抛掷花费可以用$2f_i-1$这种利用期望表示的式子,其实是因为$2f_i-1$这个式子为一次函数,我们可以用两种方法证明在外部函数为一次函数的情况下,可以利用期望做自变量得到因变量的期望
同时扩展一下,我们可以证明,仅有一次函数满足这个条件
我们明确一下证明的内容,即若$x_0$为$x$的期望,若$F(x_0)$等于$F(x)$的期望,则$F(x)$一定为一次函数(为了方便表达,设$F^{'}(x)$为$F(x)$的期望)
①证明一次函数可行
由于$x_0=\sum p_iv_i$,我们将其中$p_i$的影响去掉,用一个无穷集合记录,在这个集合中$v_i:v_j$的数量比为$p_i:p_j$,而$x_0$则可以表达为这个集合元素的平均数(实际上就是将加权平均数化为了平均数,更便于理解)
而$x_0$的定义为集合数中的一次方平均数,则在一次函数$F(x)$的影响下,$\frac {\sum F(x)}n=F(\frac {\sum x}n)$
推广一下,若$x_0$为元素的$k$次方期望(加权平均值),则仅有$k$次函数满足上述性质
②证明仅有一次函数可行
由于$x_0=\sum p_iv_i$
则有$F(x_0)=F(\sum p_iv_i),F^{'}(x)=\sum p_iF(v_i)$
如果要求$F(x_0)=F^{'}(x)$,则要求$F(\sum p_iv_i)=\sum p_iF(v_i)$,满足条件下$F(pv)=pF(v)$,则$F(x)$一定为正比例函数,但考虑到求$\sum$时项的数量都是相等的,所以我们可以在正比例函数的基础上加上一个常数,这样在求$\sum$后常数之间可以抵消。由此可证$F(x)$一定要求为一次函数
Code
#include <cstdio>
int main(){
int n;double p;
while(1){
scanf("%d%lf",&n,&p);if(!n)return 0;
printf("%.3lf %.3lf\n",n/p,1.0*n*(n+1-p)/(p*p));
}
}