码迷,mamicode.com
首页 > 其他好文 > 详细

Luogu P1654 OSU!

时间:2019-08-29 18:29:52      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:十分   ref   期望   连续   amp   维护   its   int   code   

题目链接:Click here

Solution:

定义\(E(x)\)表示在第x位置时的期望得分,考虑\(E(x)\)\(E(x+1)\)之间的关系

如果\(x+1\)位置为1,则在\(x\)位置结束的连续的1长度都要+1

我们考虑先把\((x+1)^3\)分解,\((x+1)^3=x^3+3x^2+3x+1\)

也就是说对所有之前的极长串,他们都要加上\(3x^2+3x+1\)的贡献

则我们考虑来维护\(x^2\)\(x\)这两个值的期望

维护\(x\)十分简单,\(Ex_1(i)=p(i)\times (Ex_1(i-1)+1)\),因为是增加值,所以之前的值也都要乘上概率

考虑如何维护\(x^2\)\((x+1)^2=x^2+2x+1\),所以\(Ex_2(i)=p_i\times (Ex_2(i-1)+2Ex_1(i-1)+1)\)

最后就是答案了:\(E(i)=E(i-1)+p(i)\times (3Ex_2(i-1)+3Ex_1(i-1)+1)\)

Code

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1;
int n;
double f1,f2,f3,p[N];
signed main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%lf",&p[i]);
    for(int i=1;i<=n;i++){
        f3=f3+p[i]*(3*f2+3*f1+1);
        f2=p[i]*(f2+2*f1+1);
        f1=p[i]*(f1+1);
    }printf("%.1lf\n",f3);
    return 0;
}

Luogu P1654 OSU!

标签:十分   ref   期望   连续   amp   维护   its   int   code   

原文地址:https://www.cnblogs.com/NLDQY/p/11430952.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!