[bzoj 4318]OSU!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[bzoj 4318]OSU!相关的知识,希望对你有一定的参考价值。

题目:

一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串。在这个串中连续的 X个1可以贡献X^3 的分数,这x个1不能被其他连续的1所包含。 现在给出n,以及每个操作的成功率,请你输出期望分数,输出四舍五入后保留1位小数。 
 
又是概率题,没错,今天都在刷这个。信息学里刷数学果然有一种畅快感233。
现在我们来分(kou)析(hu)一波:
长度x的连续子串的下一位为1,对答案的贡献是\\({(x + 1)^3} - {x^3} = 3{x^2} + 3x + 1\\)。
于是维护\\(x\\)和\\({x^2}\\)的期望\\({E}(x)\\)和\\({E}({x^2})\\)即可。
但是维护时注意,\\({E}({x^2})\\)不等同于\\({E}{(x)^2}\\),而算期望值时要用\\({E}({x^2})\\)
( \\({\\rm E}{(x)^2} = {(\\sum {{p_i}{a_i}} )^2}\\) , \\({\\rm E}({x^2}) = \\sum {{p_i}a_i^2}\\) ,当然不同。而原贡献中要求的是\\({E}({x^2})\\)。)
 
代码如下:
#include <cstdio>
using namespace std;
int main()
{
    int n;scanf("%d",&n);
    double ans,Ex,Ex2,p;
    for(int i = 1;i <= n;i++)
    {
        scanf("%lf",&p);
        ans += (3 * Ex2 + 3 * Ex + 1) * p;
        Ex2 = (Ex2 + 2 * Ex + 1) * p;
        Ex = (Ex + 1) * p;
    }
    printf("%.1lf\\n",ans);
    return 0;
}

看了这代码量,我忽然觉得,这真TM是一道水题... ...

技术分享

以上是关于[bzoj 4318]OSU!的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ 4318 OSU!

BZOJ4318: OSU!

bzoj4318 OSU!

Bzoj4318 OSU!

bzoj4318 OSU!

●BZOJ 4318 OSU!