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

【数学】第十三届蓝桥杯省赛C++ A组/研究生组《爬树的甲壳虫》(C++)

【题目描述】

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

【输入格式】

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

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

【输出格式】

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

其中有理数 a / b 对质数 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≤10的9次方,为了保证不出现无解的情况,额外增加限制条件 yi−xi≠998244353(如不增加此条件,则可能出现无解情况,此为比赛原题考虑不周)。

【输入样例1】

1

2

【输出样例1】

2

【输入样例2】

3
1 2
3 5
7 11

【输出样例2】

623902744

【代码】

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

typedef long long LL;

const int P = 998244353;

int n;

LL qmi(int a, int b)
{
    LL res = 1;
    while (b)
    {
        if (b & 1) res = res * a % P;
        a = (LL)a * a % P;
        b >>= 1;
    }
    return res;
}

int main()
{
    scanf("%d", &n);

    int res = 0;
    while (n -- )
    {
        int x, y;
        scanf("%d%d", &x, &y);

        res = (res + 1ll) * y % P * qmi(y - x, P - 2) % P;
    }

    printf("%d\n", res);
    return 0;
}

http://www.kler.cn/news/272954.html

相关文章:

  • 十四届蓝桥杯省赛Java B组 合并区域
  • Linux第80步_使用“信号量”实现“互斥访问”共享资源
  • 通过Https请求可以返回哪些数据?
  • mybatis项目中配置sql提示
  • IPSEC VPN-详解原理
  • elasticsearch基础学习
  • yaml配置文件D19
  • 【MyBatis-Plus】逻辑删除、乐观锁、防全表更新和删除实现 MyBatisX插件 高级扩展
  • VMD + CEEMDAN 二次分解,CNN-Transformer预测模型
  • Cookie与Session
  • 水电站防水淹厂房视频、报警系统解决方案
  • mac安装rust环境
  • 实现C++自定义的String类
  • 47.全排列II
  • Java微服务分布式事务框架seata
  • 【Mysql事务】
  • 用python如何实现智能合约?如何使用remix编写solidity智能合约并部署上链
  • 【how2j练习题】HTML部分综合练习
  • (二十五)Flask之MTVMVC架构模式Demo【重点:原生session使用及易错点!】
  • 消息队列面试题