当前位置: 首页 > news >正文

AcWing:4646. 爬树的甲壳虫

描述:

有一只甲壳虫想要爬上一颗高度为 n 的树,它一开始位于树根,高度为 0,当它尝试从高度 i−1爬到高度为 i 的位置时有 Pi 的概率会掉回树根,求它从树根爬到树顶时,经过的时间的期望值是多少。

输入格式

输入第一行包含一个整数 n 表示树的高度。

接下来 n 行每行包含两个整数 xi,yi,用一个空格分隔,表示 Pi=xi/yi。

输出格式

输出一行包含一个整数表示答案,答案是一个有理数,请输出答案对质数 998244353 取模的结果。

其中有理数 ab 对质数 P 取模的结果是整数 c 满足 0≤c<P 且 c⋅b≡a(modP)。

数据范围

对于 20% 的评测用例,n≤2,1≤xi<yi≤20;
对于 50% 的评测用例,n≤500,1≤xi<yi≤200;
对于所有评测用例,1≤n≤100000,1≤xi<yi≤109。

输入样例1:
1
1 2
输出样例1:
2
输入样例2:
3
1 2
3 5
7 11
输出样例2:
623902744

假设当高度为k时,从树根爬到k所需要的期望时间是f(k)

从f(k−1)出发,爬到高度为k有两种方式:

1.直接从k−1的位置多爬一格不掉下去;
2.从k−1个的位置多爬一个的时候先掉下去了,再从底部爬完k。

得出推导式 

f(k)=(f(k−1)+1)(1−pk)+(f(k−1)+1+f(k))pk,

化简上式

f(k)=f(k−1)+1/(1−pk)

代入 pk=xk/yk

f(k)=yk(f(k−1)+1)/yk−xk

 直接用费马小定理+快速幂求逆元

以下是AC代码:

#include <iostream>
#include <cstring>
#include <algorithm>/* 定义 */
using namespace std;
typedef long long LL;
const int MOD = 998244353;
int n , ans = 0;/* 快速幂模版 */
int qsm(int a , int b)
{int res = 1 % MOD;for(; b ; b >>= 1){if(b & 1) res = 1ll * res * a % MOD;a = 1ll * a * a % MOD;}return res;
}int main()
{/* 读入 */cin >> n;for(int i = 0 ; i < n ; i ++){int x , y;cin >> x >> y;/* 核心 */ans = (ans + 1ll) * y % MOD * qsm(y - x, MOD - 2) % MOD;}cout << ans;return 0;
}

相关文章:

  • mysql INSERT数据覆盖现有元素(若存在)
  • 【MQ01】什么是消息队列?用哪个消息队列?
  • Go语言学习笔记:基础语法和类型
  • 【Java】SpringMVC参数接收
  • 【电商API接口Python实例】100个Python爬虫实例
  • pyspark之Structured Streaming file文件案例1
  • 设备通过GB28181注册到EasyCVR,平台看不到设备信息的排查方法汇总
  • OpenCV第 2 课 OpenCV 环境搭建
  • LabVIEW高级CAN通信系统
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • 深入Android S (12.0) 探索Framework之输入子系统InputReader的流程
  • notepad++: 插件fingertext 来创建代码块
  • 考研过后你如坐针毡,而有些人因选择中国人民大学与加拿大女王大学金融硕士而乐在其中
  • 网络中黑客攻击使用手段Top25漏洞常见参数,8个WAF绕过,一些用于查找敏感文件的语法
  • Windows ssh登录eNSP交换机
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Angular4 模板式表单用法以及验证
  • happypack两次报错的问题
  • HTML5新特性总结
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Promise面试题2实现异步串行执行
  • Redis字符串类型内部编码剖析
  • Spring核心 Bean的高级装配
  • V4L2视频输入框架概述
  • 对JS继承的一点思考
  • 开源地图数据可视化库——mapnik
  • 使用parted解决大于2T的磁盘分区
  • 微信支付JSAPI,实测!终极方案
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 容器镜像
  • #laravel 通过手动安装依赖PHPExcel#
  • #单片机(TB6600驱动42步进电机)
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (02)Hive SQL编译成MapReduce任务的过程
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (区间dp) (经典例题) 石子合并
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (五)关系数据库标准语言SQL
  • (转)visual stdio 书签功能介绍
  • (转)大型网站的系统架构
  • (轉貼) UML中文FAQ (OO) (UML)
  • ./configure,make,make install的作用
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .NET CF命令行调试器MDbg入门(一)
  • .net core开源商城系统源码,支持可视化布局小程序
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net 无限分类
  • .Net 应用中使用dot trace进行性能诊断
  • .net快速开发框架源码分享
  • .Net中的设计模式——Factory Method模式
  • ?.的用法
  • @Autowired多个相同类型bean装配问题