CF1265E题解

题目

\(f_i\) 表示问完了前 \(i-1\) 面镜子,还期望要多少天。

\(f_i=p_i f_{i+1}+(1-p_i)f_1 +1,f_{n+1}=0\) ,答案即为 \(f_1\)

将递推式变形,有 \(f_i-f_1=p_i(f_{i+1}-f_1)+1\)

\(g_i=f_i-f_1\),则 \(g_i=p_i g_{i+1}+1,g_{i+1}=\frac{g_i-1}{p_i},g_1=f_1-f_1=0\)

于是我们可以递推求出所有的 \(g_i\)

因为 \(f_n=p_n f_{n+1}+(1-p_n)f_1+1=f_1-p_n f_1+1\),所以 \(f_n-f_1=g_n=1-p_n f_1,f_1=\frac{1-g_n}{p_n}\)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod=998244353;
ll n,p[200005],g[200005],ans;
inline ll qpow(ll a,ll b){
	ll ret=1;
	while(b){
		if(b&1)ret=ret*a%mod;
		a=a*a%mod;
		b>>=1; 
	}
	return ret;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n;
	g[1]=0;
	for(int i=1;i<=n;i++){
		cin>>p[i];
		p[i]=p[i]*qpow(100,mod-2)%mod;
		g[i+1]=(g[i]-1+mod)%mod*qpow(p[i],mod-2)%mod;
	}
	ans=mod-g[n+1];
	cout<<ans;
	return 0;
}

posted @ 2025-09-12 10:19  PenguinJ  阅读(5)  评论(0)    收藏  举报