BZOJ4318: OSU!

题目地址

https://www.lydsy.com/JudgeOnline/problem.php?id=4318

题解

虽然期望函数\(E(x)\)是个线性函数,满足\(E(ax)=aE(x)\),但是这道题并不能用这个性质..因为前面连续0个数的平方的期望和前面连续0个数的期望的平方并不是一个东西...\(E(x)^2\not = E^2(x)!\)
所以需要维护两个东西:前面连续0个数的平方的期望和前面连续0个数的期望。
这个两个东西挺好转移的。
显然\(g[i]=p[i]\times(g[i-1]+1)\)
然后由完全平方公式可得,\(g_1[i]=p[i]\times (g_1[i-1]+2\times g[i-1]+1)\)
然后根据二项式定理,\((a+b)^3\)的系数为1 3 3 1,然后直接和前面的\(g_1\)一样,改一下系数转移即可。
\(f[i]=f[i-1]+p[i]*(3g[i-1]+3g_1[i-1]+1)\)

#include <bits/stdc++.h>
using namespace std;

const int N = 100010;

int n;
double g[N], f[N], p[N], g1[N];

int main() {
	scanf("%d", &n);
	for(int i = 1; i <= n; ++i) scanf("%lf", &p[i]);
	for(int i = 1; i <= n; ++i) {
		g[i] = (double)p[i] * (g[i - 1] + 1.0);
		g1[i] = (double)p[i] * (g1[i - 1] + 2.0 * g[i - 1] + 1.0);
		f[i] = f[i - 1] + (double)p[i] * (1.0 + 3.0 * g[i - 1] + 3.0 * g1[i - 1]);
	}
	printf("%.1lf\n", f[n]);
}
posted @ 2019-09-02 19:39  henry_y  阅读(...)  评论(...编辑  收藏