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