题目大意:
有 (n) 次点击要做,成功了就是 o
,失败了就是 x
,分数是按 combo 计算的,连续 (a) 个 combo 就有 (a imes a) 分,combo 就是极大的连续o
。
思路:
设 (f_i) 表示前 (i) 秒期望分数,(g_i) 表示前 (i) 秒期望连续 combo。
方程显然:
[g_i=(g_{i-1}+1)p
]
[f_i=f_{i-1}+left((g_{i-1}+1)^2-{g_{i-1}}^2
ight)p=f_{i-1}+(2g_{i-1}+1)p
]
(p) 表示当前为 o
的概率。
代码:
const int N = 100010;
int n;
double x, f[N][2];
int main()
{
scanf ("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf ("%lf", &x);
f[i][0] = f[i - 1][0] + (2 * f[i - 1][1] + 1) * x;
f[i][1] = (f[i - 1][1] + 1) * x;
}
printf ("%.15lf", f[n][0]);
return 0;
}