【YBTOJ】【CF235B】【Luogu P1365】Let's Play Osu!

題目大意:

\(n\) 次點擊要作,成功了就是 o,失敗了就是 x,分數是按 combo 計算的,連續 \(a\) 個 combo 就有 \(a\times a\) 分,combo 就是極大的連續ospa

思路:

\(f_i\) 表示前 \(i\) 秒指望分數,\(g_i\) 表示前 \(i\) 秒指望連續 combo。code

方程顯然:class

\[g_i=(g_{i-1}+1)p \]

\[f_i=f_{i-1}+\left((g_{i-1}+1)^2-{g_{i-1}}^2\right)p=f_{i-1}+(2g_{i-1}+1)p \]

\(p\) 表示當前爲 o 的機率。im

代碼:

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;
}
相關文章
相關標籤/搜索