cf期望概率专题

cf1009E:求到第i段期望和的比较困难,但是单独求每段的期望是比较容易的,所以单独对每段求和,然后累计总和

E[i]=1/2*a1+1/4*a2+...+1/2^(i-1)*ai-1+1/2^(i-1)*ai,E[1-n]是可以递推的

#include<bits/stdc++.h>
using namespace std;
#define ll long long

const int maxn = 1e6+10;
const ll mod = 998244353;

int n;
ll a[maxn],dp[maxn],P[maxn];

int main(){
    cin>>n;
    for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
    P[0]=1;
    for(int i=1;i<=n;i++)P[i]=P[i-1]*2%mod;

    dp[1]=a[1]*P[n-1]%mod;
    for(int i=2;i<=n;i++){
        dp[i]=((dp[i-1]-a[i-1]*P[n-i]%mod)%mod+mod)%mod;    
        dp[i]=(dp[i]+a[i]*P[n-i]%mod)%mod;
    }
    
    ll ans=0;
    for(int i=1;i<=n;i++)
        ans=(ans+dp[i])%mod;    
    cout<<ans<<'\n';
}
View Code

猜你喜欢

转载自www.cnblogs.com/zsben991126/p/11446533.html