期望长度:

ki=(ki1+1)×pi k_i=(k_{i−1}+1)×p_i ki=(ki1+1)×pi

期望分数:

fi=fi1×(1pi)+(fi1+2×ki1+1)×pi f_i=f_i−1×(1−p_i)+(f_i−1+2×k_i−1+1)×p_i fi=fi1×(1pi)+(fi1+2×ki1+1)×pi

于是可以写出:

int n;
double p[N],f[N],k[N];

void solve(){
	//k[0] = 0;
	rep(i,1,n)
		k[i] = (k[i-1] + 1) * p[i];

	//f[0] = 0;
	rep(i,1,n){
		f[i] = f[i-1]*(1.0-p[i]) + (f[i-1] + 2.0*k[i-1] + 1.0)*p[i];
	}
	printf("%.10lf",f[n]);
}