bzoj 4318 || 洛谷P1654 OSU!

https://www.lydsy.com/JudgeOnline/problem.php?id=4318

https://www.luogu.org/problemnew/show/P1654

看来自己还是naive...


注意:和的期望=期望的和;平方的期望!=期望的平方,立方的期望!=期望的立方

那么怎么算一组变量的和的立方的期望呢?当然是不能用和的期望的立方的

a,b互相独立时,

$E((a+b)^3)=E(a^3+3*a^2*b+3*a*b^2+b^3)=E(a^3)+3*E(a^2)*E(b)+3*E(a)*E(b^2)+E(b^3)$

$E((a+b)^2)=E(a^2)+2*E(a)*E(b)+E(b^2)$

$E(k*a)=k*E(a)$(k为常数)

于是,如果要算变量的和的立方的期望,就维护一下变量的立方,平方,本身的期望,按以上规则合并


 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<vector>
 5 using namespace std;
 6 #define fi first
 7 #define se second
 8 #define mp make_pair
 9 #define pb push_back
10 typedef long long ll;
11 typedef unsigned long long ull;
12 typedef pair<int,int> pii;
13 double a11,a12,a13;
14 //a11表示当前全1段长度期望,a12表示当前段长度平方期望,a13表示当前段长度立方期望
15 double a2;//a2表示之前段答案期望
16 int n;
17 int main()
18 {
19     double t,t11,t12,t13,t2;
20     scanf("%d",&n);
21     while(n--)
22     {
23         scanf("%lf",&t);
24         t11=t*(a11+1);
25         t12=t*(a12+1+2*a11);
26         t13=t*(a13+3*a12+3*a11+1);
27         t2=a2+(1-t)*a13;
28         a11=t11;
29         a12=t12;
30         a13=t13;
31         a2=t2;
32         //printf("1t%f %f %f %f
",a11,a12,a13,a2);
33     }
34     printf("%.1f",a13+a2);
35     return 0;
36 }
View Code
原文地址:https://www.cnblogs.com/hehe54321/p/9810551.html