【数学】第十三届蓝桥杯省赛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;
}

相关推荐

  1. C&C++ 研究生

    2024-03-18 21:20:02       21 阅读
  2. C&C++ 研究生2.0

    2024-03-18 21:20:02       16 阅读

最近更新

  1. How to Describe Figures in a Research Article

    2024-03-18 21:20:02       0 阅读
  2. 常见网络攻击方式及防御方法

    2024-03-18 21:20:02       1 阅读
  3. Amazon Bedrock 常用权限分类详解

    2024-03-18 21:20:02       1 阅读
  4. Emacs有什么优点,用Emacs写程序真的比IDE更方便吗?

    2024-03-18 21:20:02       1 阅读
  5. AWS Glue 与 Amazon Redshift 的安全通信配置

    2024-03-18 21:20:02       1 阅读

热门阅读

  1. docker服务起不来原因及解决

    2024-03-18 21:20:02       21 阅读
  2. JDBC的概念

    2024-03-18 21:20:02       23 阅读
  3. pyttsx3应用场景案例

    2024-03-18 21:20:02       20 阅读
  4. 【基础】连续数的和 c++

    2024-03-18 21:20:02       20 阅读
  5. android 事件分发笔记

    2024-03-18 21:20:02       21 阅读
  6. Milvus部分源码阅读

    2024-03-18 21:20:02       20 阅读