好题推荐 CF1265E Beautiful Mirrors

题目传送门-洛谷
题目传送门-CF

Part.1 题意

n n n 面镜子,第 i i i 个镜子有 p i 100 \frac{p_{i}}{100} 100pi 的概率说 “你真好看”。一个人从第一个镜子开始,到第 n n n 个镜子说 “你真好看” 为止的天数期望,方式如下:

  • 问第 i i i 个镜子
    • 如果说 “好看”,那么下一天去问 i + 1 i+1 i+1 个镜子。
    • 否则下一天回到第一个镜子前问。

Part.2 题解

需要用到逆元,前面的 1931 G 1931G 1931G 讲过了,可以去看看。

我们假设让第 i i i 个镜子说 “好看” 的期望天数为 d p i dp_{i} dpi。那么我们可以发现路线一定是不停地在 1 1 1 i i i 之间徘徊的。那么我们可以列出如下方程:
d p i = ( d p i − 1 + 1 ) × ( p + 1 ) dp_{i}=(dp_{i-1}+1)\times (p+1) dpi=(dpi1+1)×(p+1)

p p p 为回到起点的次数的期望。

问题是,我们怎么计算 p p p,可以发现,如果我们尝试了 1 p i 100 \frac{1}{\frac{p_{i}}{100}} 100pi1 次就能成功,那么可以得出:’
p = 1 p i 100 = 100 p i p=\frac{1}{\frac{p_{i}}{100}}=\frac{100}{p_{i}} p=100pi1=pi100

那么方程就显而易见的了。

Part.3 代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define mod 998244353
int Pow(int a,int n){
	int ans=1;
	while (n){
		if (n&1) ans=ans*a%mod;
		a=a*a%mod; n>>=1;
	}return ans;
}signed main(){
	int n; cin>>n;
	int ans=0;
	for (int i=1; i<=n; i++){
		int x; cin>>x; x=100*Pow(x,mod-2)%mod;
		ans=(ans+1)*x%mod;
	}cout<<ans;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值