CF1265E Beautiful Mirrors

CF1265E Beautiful Mirrors

洛谷CF1265E Beautiful Mirrors

题目大意

Creatnx \text{Creatnx} Creatnx n n n面魔镜,每天她会问一面镜子:“我漂亮吗?”,第 i i i面魔镜有 p i 100 \dfrac{p_i}{100} 100pi的概率告诉 Creatnx \text{Creatnx} Creatnx她漂亮。

Creatnx \text{Creatnx} Creatnx从第 1 1 1面镜子开始,每天询问一面镜子。对于第 i i i面镜子,将会发生两种情况:

  • 如果这面镜子告诉 Creatnx \text{Creatnx} Creatnx她很漂亮:
    • 如果这是第 n n n面镜子,那么 Creatnx \text{Creatnx} Creatnx将会很开心并停止询问
    • 否则, Creatnx \text{Creatnx} Creatnx将在第二天询问第 i + 1 i+1 i+1面镜子
  • 否则, Creatnx \text{Creatnx} Creatnx将会十分伤心,第二天重新从第 1 1 1面镜子开始询问

Creatnx \text{Creatnx} Creatnx停止询问的期望天数对 998244353 998244353 998244353取模后的值。

1 ≤ n ≤ 2 × 1 0 5 , 1 ≤ p i ≤ 100 1\leq n\leq 2\times 10^5,1\leq p_i\leq 100 1n2×105,1pi100


题解

P i = p i 100 P_i=\dfrac{p_i}{100} Pi=100pi

f i f_i fi表示从第 i i i面镜子开始直到停止询问的期望天数,则转移式如下:

f i = P i × f i + 1 + ( 1 − P i ) × f 1 + 1 f_i=P_i\times f_{i+1}+(1-P_i)\times f_1+1 fi=Pi×fi+1+(1Pi)×f1+1

也就是说,当前有 P i P_i Pi的可能走到第 i + 1 i+1 i+1面镜子,有 1 − P i 1-P_i 1Pi的可能走到第 1 1 1面镜子。因为从当前的镜子走到另一面镜子需要花费一天的时间,所以要加 1 1 1

f n + 1 = 1 f_{n+1}=1 fn+1=1,我们要求的是 f 1 f_1 f1

但是,每个式子中都有 f 1 f_1 f1,所以我们考虑推式子。

先看 f 1 f_1 f1

f 1 = P 1 f 2 + ( 1 − P 1 ) f 1 + 1 P 1 f 1 = P 1 f 2 + 1 f 1 = f 2 + 1 P 1 f 2 = f 1 − 1 P 1 f_1=P_1f_2+(1-P_1)f_1+1 \\ \qquad \\ P_1f_1=P_1f_2+1 \\ \qquad \\ f_1=f_2+\dfrac{1}{P_1} \\ \qquad \\ f_2=f_1-\dfrac{1}{P_1} f1=P1f2+(1P1)f1+1P1f1=P1f2+1f1=f2+P11f2=f1P11

再看 f 2 f_2 f2

f 2 = P 2 f 3 + ( 1 − P 2 ) f 1 + 1 f 1 − 1 P 1 = P 2 f 3 + ( 1 − P 2 ) f 1 + 1 P 2 f 1 = P 2 f 3 + 1 P 1 + 1 f 1 = f 3 + 1 P 1 P 2 + 1 P 2 f_2=P_2f_3+(1-P_2)f_1+1 \\ \qquad \\ f_1-\dfrac{1}{P_1}=P_2f_3+(1-P_2)f_1+1 \\ \qquad \\ P_2f_1=P_2f_3+\dfrac{1}{P_1}+1 \\ \qquad \\ f_1=f_3+\dfrac{1}{P_1P_2}+\dfrac{1}{P_2} f2=P2f3+(1P2)f1+1f1P11=P2f3+(1P2)f1+1P2f1=P2f3+P11+1f1=f3+P1P21+P21

我们可以发现, f 1 = f i + 1 + 1 P 1 P 2 ⋯ P i + 1 P 2 P 3 ⋯ P i + ⋯ + 1 P i f_1=f_{i+1}+\dfrac{1}{P_1P_2\cdots P_i}+\dfrac{1}{P_2P_3\cdots P_i}+\cdots+\dfrac{1}{P_i} f1=fi+1+P1P2Pi1+P2P3Pi1++Pi1,也就是

f 1 = f i + 1 + ∑ j = 1 i ∏ k = j i 1 P k f_1=f_{i+1}+\sum\limits_{j=1}^i\prod\limits_{k=j}^i\dfrac{1}{P_k} f1=fi+1+j=1ik=jiPk1

我们知道 f n + 1 = 0 f_{n+1}=0 fn+1=0,那么就可以用这个式子来求 f 1 f_1 f1了。

时间复杂度为 O ( n ) O(n) O(n)

code

#include
using namespace std;
const long long mod=998244353;
int n,p[200005];
long long now=1,ans=0;
long long mi(long long t,long long v){
	if(!v) return 1;
	long long re=mi(t,v/2);
	re=re*re%mod;
	if(v&1) re=re*t%mod;
	return re;
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&p[i]);
	}
	for(int i=n;i>=1;i--){
		now=now*mi(p[i],mod-2)%mod*100%mod;
		ans=(ans+now)%mod;
	}
	printf("%lld",ans);
	return 0;
}

你可能感兴趣的:(题解,题解,c++)