题解 CF1265E 【Beautiful Mirrors】

Solution

我们可以列出 \(n\) 个概率方程,然后手玩方程即可。

设第 \(i\) 个镜子开始的期望天数为 \(x_i\),通过第 \(i\) 面镜子的概率为 \(p_i\),则依题意有:

\[x_i=p_i(x_{i+1}+1)+(1-p_i)(x_1+1) \]

并且,\(x_{n+1}=0\),要求解 \(x_1\)

由上,\(x_1=\dfrac{1}{p_1}+x_2=\dfrac{\dfrac{1}{p_1}+1}{p_2}+x_3=\dfrac{\dfrac{\dfrac{1}{p_1}+1}{p_2}+1}{p_3}+x_4=\cdots=\dfrac{\dfrac{\dfrac{\cdots+1}{p_{n-2}}+1}{p_{n-1}}+1}{p_n}\)

\(\therefore x_1=\dfrac{\dfrac{\dfrac{\cdots+1}{p_{n-2}}+1}{p_{n-1}}+1}{p_n}\)

Code

那么用一个变量 \(ans\) 记录当前 \(x_i\) 即可,记得勤取模。

#include<bits/stdc++.h>
using namespace std;
const int P=998244353;
int n,k,ans;
int inv(int x){//逆元
	int res=1,y=P-2;
	for(;y;y>>=1,x=1ll*x*x%P)
		if(y&1)res=1ll*res*x%P;
	return res;
}
int main(){
	scanf("%d",&n);
	for(int i=1,x;i<=n;i++){
		scanf("%d",&x);//注意概率以百分数读入
		ans=100ll*(ans+1)%P*inv(x)%P;
	}printf("%d\n",ans);
	return 0;
}
posted @ 2021-03-20 22:40  ADay526  阅读(62)  评论(0)    收藏  举报