Codeforces 1009E Intercity Travelling 【期望】【概率】

其实题目暗示了算期望,有两个难点。第一点要想到算每个site的期望;第二个是怎么算期望。

其实我一开始也想到了考虑每个site对于答案的贡献,但考虑到每个site对答案的贡献与上一个rest site在哪有关所以没有想出来。这就是第二个难点,我们引入概率来解决每个点的期望。

第n个site的期望是

这个点之前就有rest site的概率是1//2,上两个才有rest site的概率是1/4,以此类推。得到这个公式后优化维护一个last代表上一个site的期望,就O(N)做完了。

 1 #include<iostream>
 2 using namespace std;
 3 
 4 int n,a[1000005];//mi[i]为 2^i % mod 的值 
 5 long long ans,last,mi[1000005];
 6 int mod = 998244353;
 7 
 8 int main(){
 9     cin>>n;
10     for(int i=1;i<=n;i++) scanf("%d",a+i);
11     
12     mi[0]=1;
13     for(int i=1;i<=n;i++) mi[i]=(mi[i-1]*2)%mod;
14     
15     for(int i=2;i<=n;i++){
16         ans = (ans + (last + (mi[n-i]*a[i-1])%mod)%mod)%mod;
17         last = (last + (mi[n-i]*a[i-1])%mod)%mod;
18     }
19     
20     for(int i=1;i<=n;i++) ans = (ans + (mi[n-i]*a[i])%mod)%mod;
21     cout<<ans;
22     
23     return 0;
24 }

猜你喜欢

转载自www.cnblogs.com/ZhenghangHu/p/9335205.html