「BZOJ 4318」OSU!

题目链接

戳我

\(Solution\)

我们考虑每增加一个\(1\)会对答案有什么影响:

\[E((x+1)^3)-E(x^3)=E(3x^2+3x+1)=3E(x^2)+3E(x)+1 \]

所以我们只需要维护\(E(x^2)\)\(E(x)\)

令:
\(x1[i]=E(x)\)
\(x2[i]=E(x^2)\)
\(x1[i]=(x1[i-1]+1)*p[i]\)
\(x2[i]=(x2[i-1]+x1[i-1]*2+1)*p[i]\)
\(ans[i]=ans[i-1]+(x2[i-1]*3+x1[i-1]*3+1)*p[i]\)

然后写的时候可以把数组省掉

\(Code\)

#include<cstdio>
double p,x1,x2,ans;
int main(){
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%lf",&p),ans+=(x2*3+x1*3+1)*p,x2=p*(x2+2*x1+1),x1=(x1+1)*p;
	printf("%0.1lf",ans);
    return 0;
}

posted @ 2019-04-28 16:31  撤云  阅读(145)  评论(0编辑  收藏  举报
……