出处不详 阻拦投篮

news2024/9/29 5:23:40

目录

  • 阻拦投篮
    • 题目描述
      • 背景
      • 输入
      • 输出
      • 数据范围
    • 题解
      • 解法
    • 打赏

阻拦投篮

题目描述

背景

现在你得到了一个可以阻拦投篮的宝物,它会在投球后把篮球传送回运动员手上,但是宝物的成功率和篮球在空中运动的时间有关,并且在特定的时间点成功的几率是固定的,例如在第 3 3 3秒成功率是 1 4 1 \over 4 41,那么不论是第几次投球,在篮球投出后的第 3 3 3秒,宝物成功的几率都是 1 4 1 \over 4 41
宝物每秒初可以使用一次,例如在投球后的第 1 1 1秒时使用失败,可以在第 2 2 2秒接着使用,直到阻拦成功或投篮成功,且投球瞬间可以阻拦,但是球击中篮筐的瞬间不可阻拦。并且一旦篮球回到运动员手上,他会立马再次投球。现在你想知道使用宝物的情况下,运动员从第一次投球到投篮成功的期望时间间隔

输入

  1. 第一行一个整数 n n n,表示篮球到篮筐的时间;
  2. 接下来 n n n行每行包含两个整数 x i , y i x_i , y_i xi,yi,二者之商 x i y i x_i \over y_i yixi表示第 i i i秒初宝物成功的概率

输出

输出一个整数表示答案(答案是一个有理数,请输出答案对质数 998244353 998244353 998244353取模的结果)

数据范围

1 ≤ n ≤ 1 e 5 , 1 ≤ x i < y i ≤ 1 e 9 1 \le n \le 1e5 , 1 \le x_i < y_i \le 1e9 1n1e5,1xi<yi1e9

题解

解法

每次投球之后击中篮筐且不被阻拦的概率是一样的,而求期望需要算出第一次投球后经过各种情况最终投中的概率再分别乘上各自的用时,因而这些情况中最后一次投球都击中了篮筐,所以对于这些情况,它们最后一次投球后的概率计算都是一样的
所以可以按照次数对这些不同的情况进行分类,分别算出期望时间再相加

  1. 若第一次投球击中,则概率为 ∏ i = 1 n ( 1 − x i y i ) \prod_{i = 1}^n (1 - {x_i \over y_i}) i=1n(1yixi),将其记作 m m m,那么第一次击中这类情况对最终期望的贡献为 m ∗ n m * n mn
  2. 若第二次投球击中,则需在一次击中的基础上向前增加一次未击中的投球,而这次未击中的投球有很多种情况,它们的概率之和为 1 − m 1 - m 1m,所以二次击中的概率为 ( 1 − m ) m (1 - m)m (1m)m。由于那次未击中的投球存在某些情况耗费时间,所以二次击中这类情况的贡献不能简单视为 ( 1 − m ) m ∗ n (1 - m)m* n (1m)mn。易知那次未击中的投球共有 n n n种情况,由第 i i i种情况推得的二次击中的贡献为 [ ∏ j = 1 i − 1 ( 1 − x j y j ) ] ∗ x i y i ∗ m ∗ ( n + i − 1 ) [\prod_{j = 1}^{i - 1} (1 - {x_j \over y_j})] * {x_i \over y_i} * m * (n + i - 1) [j=1i1(1yjxj)]yixim(n+i1),所以贡献之和为:
    ∑ i = 1 n { [ ∏ j = 1 i − 1 ( 1 − x j y j ) ] ∗ x i y i ∗ m ∗ ( n + i − 1 ) } = m ∗ n ∗ ∑ i = 1 n { [ ∏ j = 1 i − 1 ( 1 − x j y j ) ] ∗ x i y i } + m ∗ ∑ i = 1 n { [ ∏ j = 1 i − 1 ( 1 − x j y j ) ] ∗ x i y i ∗ ( i − 1 ) } = m ∗ n ∗ ( 1 − m ) + m ∗ ∑ i = 1 n { [ ∏ j = 1 i − 1 ( 1 − x j y j ) ] ∗ x i y i ∗ ( i − 1 ) } \begin{aligned} \sum_{i = 1}^n \{ [\prod_{j = 1}^{i - 1} (1 - {x_j \over y_j})] * {x_i \over y_i} * m * (n + i - 1) \} & = m * n * \sum_{i = 1}^n \{ [\prod_{j = 1}^{i - 1} (1 - {x_j \over y_j})] * {x_i \over y_i} \} + m * \sum_{i = 1}^n \{ [\prod_{j = 1}^{i - 1} (1 - {x_j \over y_j})] * {x_i \over y_i} * (i - 1) \}\\ & = m * n * (1 - m) + m * \sum_{i = 1}^n \{ [\prod_{j = 1}^{i - 1} (1 - {x_j \over y_j})] * {x_i \over y_i} * (i - 1) \} \end{aligned} i=1n{[j=1i1(1yjxj)]yixim(n+i1)}=mni=1n{[j=1i1(1yjxj)]yixi}+mi=1n{[j=1i1(1yjxj)]yixi(i1)}=mn(1m)+mi=1n{[j=1i1(1yjxj)]yixi(i1)}

依此类推,设 k = ∑ i = 1 n { [ ∏ j = 1 i − 1 ( 1 − x j y j ) ] ∗ x i y i ∗ ( i − 1 ) } k = \sum_{i = 1}^n \{ [\prod_{j = 1}^{i - 1} (1 - {x_j \over y_j})] * {x_i \over y_i} * (i - 1) \} k=i=1n{[j=1i1(1yjxj)]yixi(i1)},因为 1 − m , k 1 - m , k 1m,k都是常数,所以第 i ( i > 1 ) i(i > 1) i(i>1)次投球击中的概率和贡献可以由第 i − 1 i - 1 i1次投球击中的概率和贡献线性表示,设第 i i i次投球击中的概率和贡献分别为 p i , a i p_i , a_i pi,ai,即 [ p i a i ] = [ 1 − m 0 k 1 − m ] [ p i − 1 a i − 1 ] ( i > 1 ) \begin{bmatrix} p_i \\ a_i \end{bmatrix} = \begin{bmatrix} 1 - m & 0 \\ k & 1 - m \end{bmatrix} \begin{bmatrix} p_{i - 1} \\ a_{i - 1} \end{bmatrix}(i > 1) [piai]=[1mk01m][pi1ai1](i>1)
[ 1 − m 0 k 1 − m ] i = [ ( 1 − m ) i 0 i ( 1 − m ) i − 1 k ( 1 − m ) i ] \begin{bmatrix} 1 - m & 0 \\ k & 1 - m \end{bmatrix}^i = \begin{bmatrix} (1 - m)^i & 0 \\ i(1 - m)^{i - 1}k & (1 - m)^i \end{bmatrix} [1mk01m]i=[(1m)ii(1m)i1k0(1m)i],因此:

[ p i a i ] = [ 1 − m 0 k 1 − m ] i − 1 [ p 1 a 1 ] = [ ( 1 − m ) i − 1 0 ( i − 1 ) ( 1 − m ) i − 2 k ( 1 − m ) i − 1 ] [ m m n ] = [ m ( 1 − m ) i − 1 m ( 1 − m ) i − 2 [ k ( i − 1 ) + n ( 1 − m ) ] ] \begin{aligned} \begin{bmatrix} p_i \\ a_i \end{bmatrix} & = \begin{bmatrix} 1 - m & 0 \\ k & 1 - m \end{bmatrix}^{i - 1} \begin{bmatrix} p_1 \\ a_1 \end{bmatrix} \\ & = \begin{bmatrix} (1 - m)^{i - 1} & 0 \\ (i - 1)(1 - m)^{i - 2}k & (1 - m)^{i - 1} \end{bmatrix} \begin{bmatrix} m \\ mn \end{bmatrix} \\ & = \begin{bmatrix} m (1 - m)^{i - 1} \\ m(1 - m)^{i - 2}[k(i - 1) + n(1 - m)] \end{bmatrix} \end{aligned} [piai]=[1mk01m]i1[p1a1]=[(1m)i1(i1)(1m)i2k0(1m)i1][mmn]=[m(1m)i1m(1m)i2[k(i1)+n(1m)]]
所以最终的期望为:
∑ i = 1 ∞ m ( 1 − m ) i − 2 [ k ( i − 1 ) + n ( 1 − m ) ] = m n ∑ i = 1 ∞ ( 1 − m ) i − 1 + m k ∑ i = 0 ∞ ( i + 1 ) ( 1 − m ) i = m n 1 − ( 1 − m ) ∞ 1 − ( 1 − m ) + m k ∑ i = 0 ∞ ( − 1 ) i ( i + 1 ) ! i ! ( m − 1 ) i = m n m + m k ∗ 1 m 2 = n + k m \begin{aligned} \sum_{i = 1}^\infty m(1 - m)^{i - 2}[k(i - 1) + n(1 - m)] & = mn \sum_{i = 1}^\infty (1 - m)^{i - 1} + mk \sum_{i = 0}^\infty (i + 1)(1 - m)^i \\ & = mn {1 - (1 - m)^\infty \over 1 - (1 - m)} + mk \sum_{i = 0}^\infty {(-1)^i (i + 1)! \over i!} (m - 1)^i \\ & = {mn \over m} + mk * {1 \over m^2}\\ & = n + {k \over m} \end{aligned} i=1m(1m)i2[k(i1)+n(1m)]=mni=1(1m)i1+mki=0(i+1)(1m)i=mn1(1m)1(1m)+mki=0i!(1)i(i+1)!(m1)i=mmn+mkm21=n+mk
由于 k , m k , m k,m均为分数,所以各需要两个变量来储存,分别表示分子和分母,答案要求的是有理数对 998244353 998244353 998244353取模的结果,所以需要使用乘法逆元
代码如下:

#include<cstdio>

#define il inline
#define ll long long

const int mod = 998244353;

il int read() {
    int x = 0;
    char c = getchar();
    while(c < '0' || c > '9') c = getchar();
    while(c >= '0' && c <= '9') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
    return x;
}

il int qpow(int x, int y) {
    int ret = 1;
    for(int i = x; y; i = (ll)i * i % mod, y >>= 1)
        if(y % 2) ret = (ll)ret * i % mod;
    return ret;
}

int n, ma = 1, mb = 1, ka, kb = 1;     //分别表示m的分子、分母,k的分子、分母

int main() {
    n = read();
    for(int i = 1; i <= n; ++i) {
        int a = read() % mod, b = read() % mod;
        ka = ((ll)ka * mb % mod * b % mod + (ll)kb * ma % mod * a % mod * (i - 1) % mod) % mod;
        kb = (ll)kb * mb % mod * b % mod;
        ma = (ll)ma * ((b - a + mod) % mod) % mod;
        mb = (ll)mb * b % mod;
    }

    int ansb = (ll)ma * kb % mod, ansa = ((ll)n * ansb % mod + (ll)mb * ka % mod) % mod;
    printf("%d", (ll)ansa * qpow(ansb, mod - 2) % mod);     //用欧拉定理求乘法逆元
    return 0;
}

打赏

制作不易,若有帮助,欢迎打赏!
赞赏码

支付宝付款码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2137112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

152-钓鱼篇邮件钓鱼Ewomail系统网页克隆劫持用户后门上线

承接上节课没讲完的邮件钓鱼和全部的网页钓鱼 #知识点&#xff1a; 1、红队技能-网络钓鱼-邮件系统 2、邮件钓鱼-平台-Gophish&Swaks 3、邮件钓鱼-系统-smtp2go&SendCloud 4、邮件钓鱼-自定义-Ewomail&Postfix 5、网页钓鱼-克隆修改-劫持口令&下载后门 这…

测试工具笔记

性能测试是软件测试中非常重要的一部分&#xff0c;它可以帮助识别软件在高负载条件下的性能瓶颈。市面上有许多性能测试工具&#xff0c;它们各有特点和优势。以下是一些流行的性能测试工具&#xff1a; 1. LoadRunner&#xff1a; 由Micro Focus提供&#xff0c;是一个业界广…

实战外网配置——光猫桥接+路由器PPPoE拨号+防火墙外网链路健康检查+外网流量负载均衡

一、适用场景&#xff1a; 1、企业规模较大时&#xff0c;1条公网带宽流量可能不足&#xff0c;需要用到多条公网出口时。 2、企业有业务需要静态ip映射&#xff0c;但是因静态ip专线价格较高&#xff0c;所以需要拨号光纤承载较多的下行流量。 3、当公网出口有多条链路&#…

[项目][WebServer][CGI机制 设计]详细讲解

目录 1.何为CGI机制&#xff1f;2.理解CGI机制3.CGI接口设计1.ProcessNonCgi2.ProcessCgi 1.何为CGI机制&#xff1f; CGI(Common Gateway Interface)是外部应用程序(CGI程序)与WEB服务器之间的接口标准&#xff0c;是在CGI程序和WEB服务器之间传递信息的过程 2.理解CGI机制 …

鸿蒙OS Service Ability

鸿蒙OS Service模板的Ability基本概念 基于 Service 模板的 Ability&#xff08;以下简称“Service”&#xff09;主要用于后台运行任务&#xff08;如执行音乐播放、文件下载等&#xff09;&#xff0c;但不提供用户交互界面。Service 可由其他应用或 Ability 启动&#xff0…

WEB攻防-PHP特性缺陷对比函数CTF考点CMS审计实例

知识点&#xff1a; 1、过滤函数缺陷绕过&#xff1b; 2、CTF考点与代码审计&#xff1b; 1、赋值 不会对比类型 类型也会对比 2、MD5 在使用比较md5的时候&#xff0c;只要第一位是相等的数字&#xff0c;则会值相等 3、intval 3、 %0a代表换行 4、 6、 7、 代码审计

Amoco:一款针对二进制源码的安全分析工具

关于Amoco Amoco是一款功能强大的二进制源码静态分析工具&#xff0c;该工具基于Python 3.8开发&#xff0c;可以帮助广大研究人员轻松对二进制程序执行静态符号分析。 工具特性 1、一个通用的指令解码框架&#xff0c;旨在减少实现对新架构的支持所需的时间。例如&#xff0c…

.NET内网实战:通过命令行解密Web.config

01阅读须知 此文所节选自小报童《.NET 内网实战攻防》专栏&#xff0c;主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧&#xff0c;对内网和后渗透感兴趣的朋友们可以订阅该电子报刊&#xff0c;解锁更多的报刊内容。 02基本介绍 本文内容部分节选自小报童…

ICM20948 DMP代码详解(22)

接前一篇文章&#xff1a;ICM20948 DMP代码详解&#xff08;21&#xff09; 上一回讲到了inv_icm20948_wakeup_mems函数&#xff0c;没有讲完&#xff0c;本回把余下的内容讲完。为了便于理解和回顾&#xff0c;再次贴出inv_icm20948_wakeup_mems函数代码&#xff0c;在EMD-Cor…

【LLM:Gemini】文本摘要、信息提取、验证和纠错、重新排列图表、视频理解、图像理解、模态组合

开始使用Gemini 目录 开始使用Gemini Gemini简介 Gemini实验结果 Gemini的多模态推理能力 文本摘要 信息提取 验证和纠错 重新排列图表 视频理解 图像理解 模态组合 Gemini多面手编程助理 库的使用 引用 本文概述了Gemini模型和如何有效地提示和使用这些模型。本…

Linux:git

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《Linux&#xff1a;git》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 如果本篇文章对你有帮助&#xff0c;还请各位点点赞&#xff01;&#xff01;&…

基于java网吧管理系统设计与实现

博主介绍&#xff1a;专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的可以…

Pytorch_CPU鸢尾花lirsDataset 尝试

鸢尾花数据集&#xff08;lris Dataset&#xff09; &#xff08;1&#xff09;下载地址【引用】&#xff1a;鸢尾花数据集下载 &#xff08;2&#xff09;鸢尾花数据集特点 茑尾花数据集有150 条样本记录&#xff0c;分为3个类别&#xff0c;每个类别有 50 个样本&#xff…

学习笔记JVM篇(一)

1、类加载的过程 加载->验证->准备->解析->初始化->使用->卸载 2、JVM内存组成部分&#xff08;HotSpot&#xff09; 名称作用特点元空间&#xff08;JDK8之前在方法区&#xff09;用于存储类的元数信息&#xff0c;例如名称、方法名、字段等&#xff1b;…

【程序分享】express 程序:可扩展的高级工作流程,用于更快速的从头算材料建模

分享一个 express 程序&#xff1a;可扩展的高级工作流程&#xff0c;用于更快速的从头算材料建模。 感谢论文的原作者&#xff01; 主要内容 “在这项工作中&#xff0c;我们介绍了一个开源的Julia项目express&#xff0c;这是一个可扩展的、轻量级的、高通量的高级工作流框…

学python要下什么包吗,有推荐的教程或者视频吗?

初学者可以尝试三种方法来学习Python第三方库&#xff0c;第一种传统&#xff0c;第二种省心&#xff0c;第三种轻量。 1、安装PythonPycharm&#xff0c;通过pip进行包管理&#xff0c;或者Pycharm后台也可以 2、安装Anaconda&#xff0c;预装了几百个数据科学包&#xff0c…

模仿抖音用户ID加密ID的算法MB4E,提高自己平台ID安全性

先看抖音的格式 对ID加密的格式 MB4EENgLILJPeQKhJht-rjcc6y0ECMk_RGTceg6JBAA 需求是 同一个ID 比如 413884936367560 每次获取得到的加密ID都是不同的&#xff0c;最终解密的ID都是413884936367560 注意这是一个加密后可解密原文的方式&#xff0c;不是单向加密 那么如下进行…

Windows 环境下 vscode 配置 C/C++ 环境

vscode Visual Studio Code&#xff08;简称 VSCode&#xff09;是一个由微软开发的免费、开源的代码编辑器。它支持多种编程语言&#xff0c;并提供了代码高亮、智能代码补全、代码重构、调试等功能&#xff0c;非常适合开发者使用。VSCode 通过安装扩展&#xff08;Extension…

abVIEW 可以同时支持脚本编程和图形编程

LabVIEW 可以同时支持脚本编程和图形编程&#xff0c;但主要依赖其独特的 图形编程 环境&#xff08;G语言&#xff09;&#xff0c;其中程序通过连线与节点来表示数据流和功能模块。不过&#xff0c;LabVIEW 也支持通过以下方式实现脚本编程的能力&#xff1a; 1. 调用外部脚本…

第4步CentOS配置SSH服务用SSH终端XShell等连接方便文件上传或其它操作

宿主机的VM安装CENTOS文件无法快速上传&#xff0c;也不方便输入命令行&#xff0c;用SSH终端xshell连接虚拟机的SSH工具就方便多了&#xff0c;实现VM所在宿主机Win10上的xshell能连接vm的centos要实现以下几个环节 1、确保宿主机与虚拟机的连通性。 2、虚拟机安装SSH服务&…