Codeforces 1265E
题意
有 n 个关卡,过第 i 个关卡的 概率为 Pi,如果通过第 i 个 关卡则进入下一关,否则就从第
1 关开始,问多少轮可以通关;
思路:
期望 Pi 则 通过这关的次数为 k = 100/Pi,
设通过第 i 关 的次数为 f[i];
则 f[i+1] = k * ( f[i] + 1 );
f[n] 则 为 答案
由于Pi要做分母,则需要用到逆元运算,由于 余数 为 质数,则可以用费马小定理求解
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 2e5+10;
const int mod = 998244353;
int a[N];
LL ksm(int a,int b)
{
int ret = 1;
a %= mod;
while( b )
{
if( b & 1 )
ret = 1ll*ret*a%mod;
b >>= 1;
a = 1ll*a*a%mod;
}
return ret % mod;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
LL ans = 0;
for(int i=1;i<=n;i++)
ans = 1ll*100*(ans+1)%mod*ksm(a[i],mod-2)%mod;
printf("%lld\n",ans);
return 0;
}