BZOJ 4318: OSU!

BZOJ3450
\((x+1)^3-x^3 = 3x^2+3x+1\)
同时维护期望长度的平方,期望长度即可

#include <bits/stdc++.h>
#define pb push_back
#define fi first
#define se second
#define pii pair<int, int>
#define lp p << 1
#define rp p << 1 | 1
#define mid ((l + r) >> 1)
#define ll long long
#define db double
#define rep(i,a,b) for(int i=a;i<b;i++)
#define per(i,a,b) for(int i=b-1;i>=a;i--)
#define Edg int cnt=1,head[N],to[N*2],ne[N*2];void addd(int u,int v){to[++cnt]=v;ne[cnt]=head[u];head[u]=cnt;}void add(int u,int v){addd(u,v);addd(v,u);}
#define Edgc int cnt=1,head[N],to[N*2],ne[N*2],c[N*2];void addd(int u,int v,int w){to[++cnt]=v;ne[cnt]=head[u];c[cnt]=w;head[u]=cnt;}void add(int u,int v,int w){addd(u,v,w);addd(v,u,w);}
#define es(u,i,v) for(int i=head[u],v=to[i];i;i=ne[i],v=to[i])

const int N = 1e5 + 7;
db p[N], len1[N], len2[N];
int n;

int main() {
    scanf("%d", &n);
    rep (i, 1, n + 1) scanf("%lf", p + i);
    db ans = 0;
    rep (i, 1, n + 1) {
        len1[i] = (len1[i - 1] + 1) * p[i];
        len2[i] = (len2[i - 1] + 2 * len1[i - 1] + 1) * p[i];
        ans += (3 * len2[i - 1] + 3 * len1[i - 1] + 1) * p[i];
    }
    printf("%.1f\n", ans);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Mrzdtz220/p/12335303.html