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'; }