线性推概率——cf1009E好题!

it2022-05-05  98

依次求每一段公里的期望消耗即可,这是可以递推的

dp[i]表示每公里的期望消耗 dp[i]=1/2*a1+1/4*a2 +...+1/2^(i-1)*ai-1 + 1/2^(i-1)*ai注意最后一项是没有间断的道路的期望虽然是算期望,但是实际上是算概率概率从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'; }

 

转载于:https://www.cnblogs.com/zsben991126/p/11070983.html


最新回复(0)