2023年牛客暑假多校-1 - J.Roulette题解

传送门(lduoj)

题目描述

Walk Alone is playing roulette, a kind of gambling. For simplification, we assume its rules and steps as follows: 

  • The whole gambling process composes of many turns.
  • In the i-th turn:
  • Walk Alone can choose an integerx_i​ and pay x_i​ yuan as the wager.
  • If Walk Alone wins, he will get 2x_i​ yuan from the maker, which means he gains x_i​ yuan in this turn. Otherwise, the maker will devour the x_i​ yuan he has paid, which means he loses x_i​ yuan in this turn. The probability that Walk Alone wins is 0.5.

Walk Alone has nnn yuan initially, and he wants to earn an extra mmm yuan. He will use the following strategy to gamble:

  • In the first turn, Walk Alone pays 1 yuan as the wager, i.e., x_1 = 1.
  • If Walk Alone wins in the (i−1)-th turn, then x_i = 1. Otherwise, x_i=2x_{i-1}
  • At the beginning of each turn, if Walk Alone has at least (n+m) yuan, then he gets satisfied and quits the game. Otherwise, he must pay x_i​ yuan as the wager, and he will have to stop gambling if he has less than x_i​ yuan.

 Walk Alone's good friend, Kelin wants to exhort him not to gamble. Tell him the probability that he successfully earns an extra mmm yuan.

输入描述

The only line of the input contains two integers n\left ( 1\leq n \leq 10^9 \right ) and m\left ( 1\leq m \leq 10^9 \right ), indicating the initial amount of money and the amount of money Walk Alone wants to earn.

输出描述

Output the probability that Walk Alone successfully earns an extra mmm yuan modulo 998244353998244353. It can be shown that the answer can always be expressed as an irreducible fraction x/y, where x and y are integers and y \not\equiv 0(mod \ \ 998244353). Output such an integer a that 0\leq a < 998244353 and a⋅a\cdot y\equiv x(mod \ \ 998244353).

样例

输入:

2 2

输出:

623902721

输入:

5 30

输出:

79070907

思路:

根据题目意思,第一次1元,第二次2元,第三次4元,第五次8元,如果第8次赢了可以赚16元,减去之前的1+2+4+8正好是1元,可以推出,只要我赢一次,我就可以获得1元,假设我在开始输之前是n元,那么我不管输几次(但是要保证有钱输),只要我赢一次,我就有n+1元。

所以我们可以把赌博的过程划分成”输输输......赢“这样的周期循环,每一个周期结束就可以获得1元。所以这一个周期赢钱的概率用以下理论进行比较:

第一次就赢:\frac{1}{2},第一次输第二次赢:\frac{1}{2} \times \frac{1}{2},第一次和第二次都输第三次赢:\frac{1}{2} \times \frac{1}{2} \times \frac{1}{2}......

以此类推,假设我这一个周期可以玩r次,那么我这一个周期赢钱的概率就\frac{1}{2}+\frac{1}{4}+...+\frac{1}{2^r},这个值也就是1-\frac{1}{2^r}
这样我们就可以从n \sim n+m每隔1个单位计算一次,这m段的概率乘起来就是最终能赚到n+m元的概率。

下面一个问题就是我怎么知道我可以玩多少次。假设我现在有n元,我能玩的次数 r 必须要满足这个要求2^r - 1 \leq n,所以我最多能玩的次数就是\left \lfloor log_2(n+1) \right \rfloor

还有一个需要解决的问题:我们可以看到题目中m的范围是1\leq m \leq 10^9,所以我们就可以如果一个单位一个单位遍历肯定 T 飞了,所以我就想,有没有某些数,他求出来的次数是一样的。然后就发现当2^{r+1}-1 = n时间求出来的是最多能玩r+1次时间的最小值,那么2^{r+1}-1-1就是 r 次,所以就可以得出2^r-1\sim 2^{r+1}-2 这个区间是能玩 r 次的钱数,所以一共有2^r-1\sim 2^{r+1}-2+1 个钱数对应的是能玩 r 次,所以我们就可以将这个区间合并起来,最多玩 r 次赢一元的概率然后(2^r-1\sim 2^{r+1}-2+1) 的次方。

题目要求输出的是a\cdot y\equiv x(mod \ \ 998244353) 中的 a ,这个 a 就是x \times y^{-1}  ,根据刚才的式子求逆元就行

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 998244353;
ll qmi(ll m,ll k,ll p)
{
    ll res = 1 % p, t = m;
    while (k)
    {
        if (k&1) res = res * t % p;
        t = t * t % p;
        k >>= 1;
    }
    return res;
}
int main()
{
    ll n,m;
    cin >> n >> m;
    m += n;
    ll ans = 1;
    while(n < m){
        ll cnt = log2(n + 1);
        ll l = n;
        ll r = min(m, (1ll << (cnt + 1)) - 1);
        ans = ans * qmi(mod + 1 - qmi((1ll << cnt), mod - 2,mod),r - n,mod) % mod;
        n = r;
    }
    cout << ans;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Apache Doris (二十八):Doris 数据导入(六)Spark Load 1- 原理及配置

目录 1. 基本原理 2. Spark集群搭建 2.1 Spark Standalone 集群搭建 2.2 Spark On Yarn 配置 3. Doris配置Spark与Yarn 3.1 Doris配置Spark 3.2 Doris配置Yarn 进入正文之前&#xff0c;欢迎订阅专题、对博文点赞、评论、收藏&#xff0c;关注IT贫道&#xff0c;获取高质…

如何为HashMap设置初始化大小

如何为HashMap设置初始化大小 1.阿里巴巴代码规范的要求2.使用阿里巴巴插件扫描时3. 源码3.1 当初始化不设置大小时3.2 当初始化设置大小时 4. 测试附录 1.阿里巴巴代码规范的要求 2.使用阿里巴巴插件扫描时 3. 源码 3.1 当初始化不设置大小时 Map<Integer, BigDecimal>…

高时空分辨率、高精度一体化预测技术之风、光、水能源自动化预测技术

能源是国民经济发展和人民生活必须的重要物质基础。在过去的200多年里&#xff0c;建立在煤炭、石油、天然气等化石燃料基础上的能源体系极大的推动了人类社会的发展。但是人类在使用化石燃料的同时&#xff0c;也带来了严重的环境污染和生态系统破坏。近年来&#xff0c;世界各…

Spingboot 多模块引入第三方jar包

1. 在需要的模块中引入jar包 2. 在此模块中的pom.xml 中引用 3. 要想打包部署服务器&#xff0c;需要在启动模块中添加配置信息 ps&#xff1a;启动模块要引用此模块才能将此一起jar打包部署 <build><plugins><plugin><groupId>org.springframework.…

MySQL备份与还原/索引/视图

MySQL备份与还原/索引/视图练习 文章目录 一、备份与还原1、使用mysqldump命令备份数据库中的所有表2、备份booksDB数据库中的books表3、使用mysqldump备份booksDB和test数据库4、使用mysqldump备份服务器中的所有数据库5、使用mysql命令还原第二题导出的book表6、进入数据库使…

牛顿修正法在二阶近似方法中的应用

使用optimtool的牛顿修正法来应用学习 pip install optimtool --upgrade pip install optimtool>2.4.2optimtool包所依据的理论支撑中&#xff0c;还没有为二阶微分方法作邻近算子的近似与修正&#xff0c;所以二阶近似方法是研究无不可微项的可微函数的算子。 牛顿修正法…

C\C++ 使用socket判断ip是否能连通

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan 简介&#xff1a; 使用socket判断ip是否能联通 效果&#xff1a; 代码&#xff1a; #include <iostream> #include <cstdlib> #include <cstdio> #include &…

soci源码解析

结构 use_type into_type statement backend 针对不同数据库后端的抽象 session 参考资料&#xff1a; https://soci.sourceforge.net/

快7月底了,让我康康有多少准备跳槽的

前两天跟朋友感慨&#xff0c;今年的铜三铁四、裁员、疫情影响导致好多人都没拿到offer!现在已经快7月底了&#xff0c;具体金九银十只剩下2个月。 对于想跳槽的职场人来说&#xff0c;绝对要从现在开始做准备了。这时候&#xff0c;很多高薪技术岗、管理岗的缺口和市场需求也…

一篇文章带你用Jenkins和Kubernetes搭建DevOps平台

JenkinsKubernetes实现DevOps DevOps 介绍Jenkins环境准备准备JDK下载jdk安装jdk配置jdk环境变量 准备maven下载maven解压maven配置maven配置maven环境变量 安装Docker安装git 安装Jenkins初始化jenkins准备代码仓库和docker镜像仓库准备Kubernetes准备java项目搭建DevOps创建代…

【Android知识笔记】应用进程(二)

Service的启动原理 向AMS发送startService请求 startService时会首先拿到AMS的Binder代理对象,向AMS发起startService请求: AMS处理startService请求 接下来看AMS端处理应用的startService请求: 回忆一下应用进程启动流程: 接下来看如果Service所在应用进程没有启动的情…

10分钟理解RNN、LSTM、Transformer结构原理!

文章目录 一、RNN1.1 RNN基本架构1.2 RNN经典的三种结构1.2.1 vector-to-sequence结构1.2.2 sequence-to-vector结构1.2.3 Encoder-Decoder结构 1.3 RNN常用领域1.4 RNN的优缺点1.5 RNN中为什么会出现梯度消失 二、LSTM2.1 LSTM与RNN差异2.2 LSTM核心思想图解2.2.1 忘记层门2.2…

微信小程序的目录解析--【浅入深出系列002】

浅入深出系列总目录在000集 如何0元学微信小程序–【浅入深出系列000】 文章目录 本系列校训学习资源的选择先说总目录经常碰到的文件(目录&#xff09;最最常见的目录pages次最常用的就是images 目录 操作起来真正的操作 配套资源作业&#xff1a; 本系列校训 用免费公开视…

简笔风和写实风的区别

现实主义和风格化 当我们谈论现实主义和风格化时&#xff0c;我们是什么意思&#xff1f;这看起来相当明显&#xff0c;现实主义指的是模仿逼真的逼真的图形。它不一定需要存在于现实世界中&#xff0c;但被传达为它属于我们的世界。10年前&#xff0c;我们认为现实的东西在今…

剑指offer33.二叉搜索树的后序遍历序列

我一开始的想法是&#xff1a;后序遍历是左右根&#xff0c;那么第一个数小于第二个数&#xff0c;第二个数大于第三个数&#xff0c;然后从第三个数开始又循环&#xff0c;显然错了&#xff0c;因为我这种是理想情况&#xff0c;是一个满二叉树。正确的解法是: class Solutio…

C# DlibDotNet 人脸识别、人脸68特征点识别、人脸5特征点识别、人脸对齐,三角剖分,人脸特征比对

人脸识别 人脸68特征点识别 人脸5特征点识别 人脸对齐 三角剖分 人脸特征比对 项目 VS2022.net4.8OpenCvSharp4DlibDotNet Demo下载 代码 using DlibDotNet.Extensions; using DlibDotNet; using System; using System.Collections.Generic; using System.ComponentModel; …

第六章:string类

系列文章目录 文章目录 系列文章目录前言为什么学习string类C语言中的字符串ASCIIUnicode**UTF-8**UTF-16UTF-32 GBK 标准库中的string类string类总结 string类的常用接口说明1. string类对象的常见构造2. string类对象的容量操作3. string类对象的访问及遍历操作4. string类对…

Nginx正向代理和反向代理详解

目录 一、什么是正向代理&#xff1f; 二、什么是反向代理&#xff1f; 三、正向代理和反向代理的作用 一、什么是正向代理&#xff1f; 正向代理&#xff0c;“它代理的是客户端”&#xff0c;是一个位于客户端和目标服务器之间的服务器&#xff0c;为了从目标服务器取得内…

Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台

Java版知识付费-轻松拥有知识付费平台 多种直播形式&#xff0c;全面满足直播场景需求 公开课、小班课、独立直播间等类型&#xff0c;满足讲师个性化直播场景需求&#xff1b;低延迟、双向视频&#xff0c;亲密互动&#xff0c;无论是互动、答疑&#xff0c;还是打赏、带货、…

【java爬虫】将优惠券数据存入数据库排序查询

本文是在之前两篇文章的基础上进行写作的 (1条消息) 【java爬虫】使用selenium爬取优惠券_haohulala的博客-CSDN博客 (1条消息) 【java爬虫】使用selenium获取某宝联盟淘口令_haohulala的博客-CSDN博客 前两篇文章介绍了如何获取优惠券的基础信息&#xff0c;本文将获取到的…