题目传送门-洛谷
题目传送门-CF
Part.1 题意
有 n n n 面镜子,第 i i i 个镜子有 p i 100 \frac{p_{i}}{100} 100pi 的概率说 “你真好看”。一个人从第一个镜子开始,到第 n n n 个镜子说 “你真好看” 为止的天数期望,方式如下:
- 问第 i i i 个镜子
- 如果说 “好看”,那么下一天去问 i + 1 i+1 i+1 个镜子。
- 否则下一天回到第一个镜子前问。
Part.2 题解
需要用到逆元,前面的 1931 G 1931G 1931G 讲过了,可以去看看。
我们假设让第 i i i 个镜子说 “好看” 的期望天数为 d p i dp_{i} dpi。那么我们可以发现路线一定是不停地在 1 1 1 和 i i i 之间徘徊的。那么我们可以列出如下方程:
d p i = ( d p i − 1 + 1 ) × ( p + 1 ) dp_{i}=(dp_{i-1}+1)\times (p+1) dpi=(dpi−1+1)×(p+1)
p p p 为回到起点的次数的期望。
问题是,我们怎么计算 p p p,可以发现,如果我们尝试了 1 p i 100 \frac{1}{\frac{p_{i}}{100}} 100pi1 次就能成功,那么可以得出:’
p = 1 p i 100 = 100 p i p=\frac{1}{\frac{p_{i}}{100}}=\frac{100}{p_{i}} p=100pi1=pi100
那么方程就显而易见的了。
Part.3 代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define mod 998244353
int Pow(int a,int n){int ans=1;while (n){if (n&1) ans=ans*a%mod;a=a*a%mod; n>>=1;}return ans;
}signed main(){int n; cin>>n;int ans=0;for (int i=1; i<=n; i++){int x; cin>>x; x=100*Pow(x,mod-2)%mod;ans=(ans+1)*x%mod;}cout<<ans;return 0;
}