BZOJ4318: OSU!

本来不是来写这题的看名字不错就顺便写了。。

连续一段长度为x的1得分为x^3,现给每个数是0或1的概率,求期望得分。n<=1e5。

方法一:f(i)--前i个数的期望得分,,P0表示某个数是0的概率,P1表示某段数是1的概率。

这东西不知道怎么维护???

方法二:新进来一个1的贡献为,所以只要求出:最后连续x个数的期望g 和 最后连续x个数平方的期望h。

注意:辅助求的那两个东西的转移和答案转移不同,辅助的那两个期望:如果读到一个数a,有a的概率贡献g(i-1)+1、h(i-1)+2*g(i-1)+1,有(1-a)的概率贡献0;而答案是:有a的概率贡献f(i-1)+3*h(i-1)+3*g(i-1)+1,有(1-a)的概率贡献f(i-1)。

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 #include<algorithm>
 5 //#include<iostream>
 6 using namespace std;
 7  
 8 int n;
 9 double f,ff,fff;
10 double a;
11 int main()
12 {
13     scanf("%d",&n);
14     f=ff=fff=0;
15     for (int i=1;i<=n;i++)
16     {
17         scanf("%lf",&a);
18         fff=fff+(3*ff+3*f+1)*a;
19         ff=(ff+2*f+1)*a;
20         f=(f+1)*a;
21 //      cout<<fff<<endl;
22     }
23     printf("%.1f",fff);
24     return 0;
25 }
View Code

 

posted @ 2017-10-07 07:15  Blue233333  阅读(154)  评论(0编辑  收藏  举报