Description

题库链接

一共有 \(n\) 个关卡,你初始在第一个关卡。通过第 \(i\) 个关卡的概率为 \(p_i\)。每一轮你可以挑战一个关卡。若通过第 \(i\) 个关卡,则进入第 \(i+1\) 个关卡,否则重新回到第 \(1\) 个关卡。通过第 \(n\) 个关卡则算成功。问期望多少轮游戏才能成功。

\(1\leq n\leq 2\cdot 10^5\)

Solution

设从第 \(i\) 个关卡通关的期望为 \(E_i\)。显然
\[
E_i=p_i(E_{i+1}+1)+(1-p_i)(E_1+1)
\]

特别地,\(E_{n+1}=0\),且答案为 \(E_1\)。

那么有
\[
E_1=p_1(E_2+1)+(1-p_1)(E_1+1)\Rightarrow E_1=\frac{1}{p_1}+E_2
\]

同理将上述式子代入
\[
E_2=p_2(E_3+1)+(1-p_2)(E_2+1)\Rightarrow E_1=\frac{1+\frac{1}{p_1}}{p_2}+E_3
\]

继续推导可以发现答案为
\[
E_1=\frac{1+\frac{1+\frac{1+\cdots}{p_{n-2}}}{p_{n-1}}}{p_n}
\]

Code

#include <bits/stdc++.h>
using namespace std;
const int yzh = 998244353; int quick_pow(int a, int b) {
int ans = 1;
while (b) {
if (b&1) ans = 1ll*ans*a%yzh;
b >>= 1, a = 1ll*a*a%yzh;
}
return ans;
}
int main() {
int ans = 0, p, n;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &p);
ans = (ans+1)%yzh;
ans = 1ll*ans*100%yzh*quick_pow(p, yzh-2)%yzh;
}
printf("%d\n", ans);
return 0;
}

最新文章

  1. ASP。net 之view
  2. MSSQL PIVOT 实现行列转置
  3. [转]很详细的devexpress应用案例
  4. mathematica练习程序(图像取反)
  5. Spring框架简介 Spring Framework Introduction
  6. Http协议访问DataSnap Rest 服务器
  7. Android学习笔记(第一篇)编写第一个程序Hello World+Activity
  8. Lucene查询索引(分页)
  9. 忘记windows的登陆密码
  10. 关于asp.net 网站网站发布时提示:错误 27 对路径 AppData\Local\Temp\~632b\bin\App_Code.compil的解决方法
  11. 增强的PuTTY 以及 自定义主题
  12. Delphi检查GetElementByID返回值的有效性
  13. pm2 安装使用
  14. 关于Python中的yield(转载)
  15. 关于python编译的一点小结
  16. Go语言string,int,int64 ,float转换
  17. qtchooser
  18. Linux(Ubuntu)使用日记------为程序添加桌面快捷方式
  19. Tomcat简单优化
  20. layer倒计时弹框/弹层 DEMO

热门文章

  1. 推荐一款好用的json导出execl格式的文件的js工具-JsonExportExcel
  2. C++ 智能指针 std::auto_ptr 分析
  3. 字符串A转换到字符串B,只能一次一次转换,每次转换只能把字符串A中的一个字符全部转换成另一个字符,是否能够转换成功
  4. java 字符串转json,json转实体对象、json字符串转换成List、List转String、以及List排序等等...
  5. Django-08-admin
  6. Django框架(十二)-- 中间件、CSRF跨站请求伪造
  7. svn-疑难解决
  8. Go基础编程实践(十)—— 数据库
  9. AX 2012 Computed column IIF语句使用
  10. CLRS10.2-7练习 - 翻转单向列表