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

news2024/11/25 22:53:27

传送门(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;
}

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

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

相关文章

ROS:nodelet

目录 一、前言二、概念三、作用四、使用演示4.1案例简介4.2nodelet 基本使用语法4.3内置案例调用 五、nodelet实现5.1需求5.2流程5.3准备5.4创建插件类并注册插件5.5构建插件库5.6使插件可用于ROS工具链5.6.1配置xml5.6.2导出插件 5.7执行 一、前言 ROS通信是基于Node(节点)的…

[RK3568] AMP架构

Rockchip 平台异构多系统 AMP &#xff08;非对称多核架构&#xff09;的开发软件包&#xff0c;支持 Linux(Kernel) 、 Standalone(Hal)、 RTOS(RT-Thread) 组合 AMP 构建形式。 Standalone(Hal) HAL&#xff1a;Hardware Abstraction Layer&#xff0c;硬件抽象层。 硬件抽…

抖音新号起号正确方法,如何操作?

抖音上有着越来越多的卖家注册账号&#xff0c;但刚开始在注册账号后&#xff0c;新号是没有什么流量的&#xff0c;所以想要获得更多的流量的话&#xff0c;在刚开始进行起号的时候就需要按照以下方式进行&#xff0c;下面就一起了解清楚。 第一个找对标内容&#xff0c;抖音…

Hadoop集群启动常见错误

错误一 &#xff1a; 配置文件错误 解决方案&#xff1a;检查配置文件&#xff0c;修改错误。重新分发&#xff08;同步&#xff09; 常见错误二 &#xff1a; 重复格式化 DataNode NameNode 在格式化时如果发现下面的提示说明重复格式化了 datanode和namenode的集群id…

KUKA机械臂的导纳控制

KUKA机械臂的导纳控制 在近期的实验中&#xff0c;需要根据传感器的给出的实时位置信息进行导纳控制&#xff0c;并实时改变导纳控制的参数。由于KUKA自带的实时导纳控制模型无法实时修改参数&#xff0c;因此尝试了自己实现导纳控制。网上这方面的资料比较少&#xff0c;整理…

Java阶段五Day09

Java阶段五Day09 文章目录 Java阶段五Day09网关Gateway跨域的问题熔断限流组件sentinel微服务场景熔断降级限流降级 sentinel学习案例sentinel介绍重要的核心概念准备一个测试的工程定义资源定义规则sentinel运行原理本地文件定义规则整合nacos实现规则的远程读取规则的内容详解…

【C++初阶】构造函数和析构函数

文章目录 一、类的六个默认成员函数二、构造函数三、析构函数 一、类的六个默认成员函数 &#x1f4d6;默认成员函数 用户没有显式实现&#xff0c;编译器会自动生成的成员函数&#xff0c;称为默认成员函数。 构造函数&#xff1a;完成对象的初始化工作。析构函数&#xff…

在dell server的UEFI mode下指定ISO安装Ubuntu

1.重启系统 在蓝色界面出现提示后选择F2进入 然后保存设置即可

Linux系统部署Nginx详细教程(图文讲解)

前言&#xff1a;本篇博客记录了我是如何使用Linux系统一步一步部署Nginx的完整过程&#xff0c;也是我学习之路上的一个笔记总结&#xff0c;每一行代码都进行了严格的测试&#xff0c;特此做一个技术分享&#xff01; 目录 一、安装依赖 二、安装Nginx 三、配置Nginx 四、…

【Docker】Docker基本管理命令

目录 一、Docker概述1.1容器化受欢迎的原因1.2Docker核心概念 二、安装 Docker2.1环境准备 三、Doker镜像操作镜像操作选项 四 、Docker 容器操作容器操作选项 一、Docker概述 Docker是一个开源的应用容器引擎&#xff0c;基于go语言开发并遵循了apache2.0协议开源。 Docker是…

Pycharm远程服务器上运行程序报错:Can‘t get remote credentials for deployment server

一、问题描述&#xff1a; 二、解决方法&#xff1a; 1.依次选择 文件 -> 设置 -> 项目 -> Python 解释器,出现如下界面&#xff1a; 2. 点击python 解释器右侧的小齿轮&#xff0c;选择全部显示&#xff1a; 3. 在弹出的窗口中发现存在多个连接到同一个服务器的解释…

亚马逊卖家该如何调整心态帮助自己“放松”?

作为亚马逊卖家&#xff0c;具备良好的心理承受能力是非常重要的。由于竞争激烈、市场变化快速等因素&#xff0c;卖家可能会面临各种压力和挑战。所以对于卖家而言&#xff0c;应该怎样调整自己的心态呢&#xff1f; 接受现实&#xff1a; 亚马逊市场是一个竞争激烈的环境&am…

python3GUI--仿win10任务管理器By:PyQt5(附UI源码)

文章目录 一&#xff0e;前言二&#xff0e;展示1.主界面1.进程2.性能1.CPU2.内存 3.简略信息4.新建任务 三&#xff0e;设计思路1.UI设计1.主界面1.进程2.性能3.详细信息4.新建任务5.图表信息组件 2.代码整体设计1.项目设计心得2.项目设计其他心得 3.其他心得 四&#xff0e;源…

【交点】直线与多边形相交显示

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 python 求直线与多边形交点并显示 1. 正文 1.1 步骤 import matplotlib.pyplot as plt from shapely.geometry import LineString, Polygon导入所需的…

Spring整合Junit

Spring整合Junit 在之前文章中Spring的测试方法几乎都能够看到如下的代码&#xff1a; ApplicationContext context new ClassPathXmlApplicationContext("xxx.xml"); XXX xxx context.getBean(XXX.class);它的作用是创建Spring容器&#xff0c;最终获取到对象&…

初识vue3/setup/ ref()/ computed/watch/生命周期/父传子

创建项目先不着急学 main.js变了 新加setup reactive ref() computed watch 生命周期 父传子 子传父 ref/模板引用 暴露子组件属性 跨层传数据 defineOptions

高效又安全的企业大数据传输解决方案推荐

在当前的商业领域中&#xff0c;企业大数据传输是一个重要而复杂的问题。随着企业规模和数据量的扩大&#xff0c;如何安全可靠、高效快速地传输大数据成为了许多企业需要面对的挑战。本文将介绍几种值得考虑的企业大数据传输解决方案&#xff0c;以帮助企业有效应对这一挑战。…

Unity基础 弹簧关节SpringJoint

弹簧关节 在游戏开发中&#xff0c;物体之间的交互性是非常重要的。为了模拟现实世界中的弹性特性&#xff0c;Unity提供了弹簧关节&#xff08;Spring Joint&#xff09;组件。通过弹簧关节&#xff0c;我们可以轻松实现物体之间的弹性交互效果。本文将详细介绍Unity中的弹簧…

C#上位机软件支持中英文多语言切换MultiLanguage

最近遇到一个项目&#xff0c;客户是国外的&#xff0c;开发上位机程序是在中国。需支持中英文多语言切换。 多语言切换思路&#xff1a; 使用不同的xml配置文件来映射不同的语言&#xff0c;窗体加载时从默认语言DefaultLanguage.xml中读取配置&#xff0c;比如中文语言 对应…

计算机网络 day11 tcpdump - 传输层 - netstat - socket - nc - TCP/UDP头部

目录 故障排查 tcpdump抓包工具 传输层&#xff08;TCP和UDP协议&#xff09; 传输层的作用 应用程序和端口号有什么关系&#xff1f; 传输层端对端连接实现拓扑图 如何查看自己的linux机器开放了哪些端口&#xff1f; 1、netstat(network status 网络的状态) netsta…