Beautiful Mirrors
题解:
f
(
i
)
f(i)
f(i)表示到达第i个关卡所用的期望天数。
f
(
i
)
=
p
i
∗
(
f
i
−
1
+
1
)
+
(
f
i
+
f
i
−
1
+
1
)
∗
(
1
−
p
i
)
f(i)=p_i*(f_{i-1}+1)+(f_i+f_{i-1}+1)*(1-p_i)
f(i)=pi∗(fi−1+1)+(fi+fi−1+1)∗(1−pi)
解释一下:到达第i个关卡所用的期望天数可以是上一个关卡的天数+1,或者上一个关卡期望天数+1并且失败到达,再加上重新到达这个关卡的天数的期望。
然后根据下面化简得到递推式。
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5+7;
const int mod=998244353;
int p[N],f[N];
int q_pow(int a,int k)
{
int res=1;
while(k){
if(k&1) res=res*a%mod;
a=a*a%mod;
k>>=1;
}
return res;
}
signed main()
{
int n; scanf("%lld",&n);
for(int i=1;i<=n;i++) scanf("%lld",p+i);
f[0]=0;
for(int i=1;i<=n;i++){
f[i]=(f[i-1]+1)*100%mod*q_pow(p[i],mod-2)%mod;
}
cout<<f[n]<<endl;
}