[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!的主要内容,如果未能解决你的问题,请参考以下文章