题意
传送门 P1654 OSU!
题解
设随机变量
x
i
x_i
xi 为位置
i
i
i 开始向左连续的
1
1
1 的长度。设
w
(
i
)
w(i)
w(i) 为
[
1
,
i
]
[1,i]
[1,i] 的期望分数。若在位置
i
i
i 以概率
p
i
p_i
pi 为
1
1
1,则贡献为
(
x
i
+
1
)
3
−
x
i
3
(x_i+1)^3-x_i^3
(xi+1)3−xi3。于是得到递推
w
(
i
)
=
p
i
[
w
(
i
−
1
)
+
E
(
3
x
i
2
+
3
x
i
+
1
)
]
+
(
1
−
p
i
)
w
(
i
−
1
)
w(i)=p_i[w(i-1)+E(3x_i^2+3x_i+1)]+(1-p_i)w(i-1)
w(i)=pi[w(i−1)+E(3xi2+3xi+1)]+(1−pi)w(i−1) 需要求解
E
(
x
i
)
E(x_i)
E(xi) 与
E
(
x
i
2
)
E(x_i^2)
E(xi2),分别设为
f
(
i
)
,
g
(
i
)
f(i),g(i)
f(i),g(i);
E
(
x
i
2
)
E(x_i^2)
E(xi2) 与
[
E
(
x
i
)
]
2
[E(x_i)]^2
[E(xi)]2 不等价,故
f
(
i
)
,
g
(
i
)
f(i),g(i)
f(i),g(i) 需分别求解。观察位置每向右移动一个位置的状态转移,根据递归的思路得到
E
(
x
i
)
=
(
1
−
p
i
)
×
0
+
p
i
×
E
(
x
i
−
1
+
1
)
E(x_i)=(1-p_i)\times 0+p_i\times E(x_{i-1}+1)
E(xi)=(1−pi)×0+pi×E(xi−1+1)
E
(
x
i
2
)
=
(
1
−
p
i
)
×
0
+
p
i
×
E
[
(
x
i
−
1
+
1
)
2
]
E(x_i^2)=(1-p_i)\times 0+p_i\times E[(x_{i-1}+1)^2]
E(xi2)=(1−pi)×0+pi×E[(xi−1+1)2] 即
f
(
i
)
=
p
i
[
f
(
i
−
1
)
+
1
]
f(i)=p_i[f(i-1)+1]
f(i)=pi[f(i−1)+1]
g
(
i
)
=
p
i
[
g
(
i
−
1
)
+
2
f
(
i
−
1
)
+
1
]
g(i)=p_i[g(i-1)+2f(i-1)+1]
g(i)=pi[g(i−1)+2f(i−1)+1]
w
(
i
)
=
w
(
i
−
1
)
+
p
i
[
3
g
(
i
−
1
)
+
3
f
(
i
−
1
)
+
1
]
w(i)=w(i-1)+p_i[3g(i-1)+3f(i-1)+1]
w(i)=w(i−1)+pi[3g(i−1)+3f(i−1)+1]
#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
int N;
double p[maxn], f[maxn], g[maxn], w[maxn];
int main()
{
scanf("%d", &N);
for (int i = 1; i <= N; ++i)
scanf("%lf", p + i);
for (int i = 1; i <= N; ++i)
{
f[i] = p[i] * (f[i - 1] + 1);
g[i] = p[i] * (g[i - 1] + 2 * f[i - 1] + 1);
w[i] = w[i - 1] + p[i] * (3 * g[i - 1] + 3 * f[i - 1] + 1);
}
printf("%.1f\n", w[N]);
return 0;
}