小信跳房子的题解

原题描述:

时间:1s 空间:256M

题目描述:

小信在玩跳房子游戏,已知跳房子游戏的图表现为一颗完美的具有2^{10^{100}}-1个节点的二叉树。从根节点依次编号为1,2,...,2^{10^{100}}-1。节点i(1\le i \le 2^{10^{100}})的左子节点编号为2i,右子节点编号为2i+1

小信从从节点x出发,共跳n步,用一个长度为n的字符串表示小信的移动方向,“U”表示跳到当前所在节点的父节点,“L”表示跳到当前节点的左子节点,“R”表示跳到当前节点的右子节点。

输出小信在跳了n步之后所处的节点编号,保证最终答案不超过10^{18}

提示:在跳的过程中节点编号可能超过10^{18}

输入格式:

第一行包含两个整数n,x,表示小信移动次数和初始所在节点编号。

第二行包含一个只含“U”,“L”和“R”的长为n的字符串S

输出格式:

输出一个整数,表示小信在跳了n步之后所处的节点编号。

样例1输入:

3 2
URL

样例1输出:

6

样例2输入:

6 500000000000000000
RRRUUU

样例2输出:

500000000000000000

约定与提示:

对于100%的数据,1 \le n \le 10^6,1\le x\le 10^{18}

样例1:小信的移动路径是2 -> 1 -> 3 -> 6

题目大意:

有一个人,再完全二叉树的x节点,求他跳动n此后在哪个节点,给定每次怎么跳动。

主要思路:

这个题是用硬枚举,但枚举时会爆掉,有人说用__int128,但还是爆,所以要消除一些无用操作(题目保证结果<=10^{18})

当操作是U时,我们发现x = x/2(向下取整,long long 自动向下取整)

当操作是R时,我们发现x = x*2+1

当操作是L时,我们发现x = x*2

我们发现LU,RU这些操作组可以不执行。

LU:

LU

RU:

RU

我们用一个vector<char>(设为v)记录一下操作的过程。

当v.back() 不是U且v非空且当前插入进来的字符是U,那么就可以抵消,把v.back删掉(由于插入时是push_back(),所以上一个插入的是在最尾端,就是v.back() )。

否则就插入一个操作符。

这样就不会爆了。

最后遍历一遍v,根据题目要求操作就可以了。

注意事项:

  1. 一定要开long long。
  2. UL和UR是不能抵消的,具体请看下图。
UL

 

UR

代码code:

#include<bits/stdc++.h>
using namespace std;
long long n,x;//开long long
vector<char> st;
int main()
{cin>>n>>x;string s;cin>>s;for(int i=0;i<n;i++){if(s[i] == 'U'&&!st.empty()&&st.back()!='U')//如果可以抵消{st.pop_back();}else{st.push_back(s[i]);}}for(int i=0;i<st.size();i++)//开始操作{if(st[i] == 'U'){x = x/2;}else if(st[i] == 'L'){x*=2;}else{x*=2;x++;}}cout<<x;return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

立体匹配算法(Stereo correspondence)SGM

SGM(Semi-Global Matching)原理&#xff1a; SGM的原理在wiki百科和matlab官网上有比较详细的解释&#xff1a; wiki matlab 如果想完全了解原理还是建议看原论文 paper&#xff08;我就不看了&#xff0c;懒癌犯了。&#xff09; 优质论文解读和代码实现 一位大神自己用c实现…

【算法】数论---约数

约数里面的一个重要性质&#xff1a;一个数的约数都是成对存在的(以sqrt(x)为分界线) 一、求一个数的所有约数---试除法 int x; cin>>x; int yue[10000]{0},idx0; for(int i1;i<x/i;i) {if(x%i0){yue[idx]i;cout<<i<<" ";} }for(int iidx-1;i&…

Java 8 中的 Stream 轻松遍历树形结构!

可能平常会遇到一些需求&#xff0c;比如构建菜单&#xff0c;构建树形结构&#xff0c;数据库一般就使用父id来表示&#xff0c;为了降低数据库的查询压力&#xff0c;我们可以使用Java8中的Stream流一次性把数据查出来&#xff0c;然后通过流式处理&#xff0c;我们一起来看看…

八个理由:从java8升级到Java17

目录 前言 1. 局部变量类型推断 2.switch表达式 3.文本块 4.Records 5.模式匹配instanceof 6. 密封类 7. HttpClient 8.性能和内存管理能力提高 前言 从Java 8 到 Java 20&#xff0c;Java 已经走过了漫长的道路&#xff0c;自 Java 8 以来&#xff0c;Java 生态系统…

基于JAVA的独居老人物资配送系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询社区4.2 新增物资4.3 查询物资4.4 查询物资配送4.5 新增物资配送 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的独居老人物资配送系统&#xff0c;包含了社区档案、…

GitHub的2FA验证问题解决工具

文章目录 前言认识2FA开源工具使用&#xff1a;AuthenticatorPro获取AuthenticatorPro的安卓APK如何使用 参考文章 前言 打开GitHub跳出来这个提示&#xff0c;需要进行验证&#xff1a; 如何解决呢&#xff1f;方案有很多&#xff0c;我们可以使用开源的一个工具&#xff1a;…

穿越时光的镜头:2023回顾与2024展望

前言 2023 年就像一本充满着惊喜和挑战的书籍&#xff0c;它的每一页都留下了我生活中不同的痕迹。回顾过去&#xff0c;我发现了许多意想不到的成长和启示&#xff0c;也体验了生活的起起伏伏。 这篇文章是对 2023 年的一个小小总结&#xff0c;也是对未来的一点期许。在这里…

大数据HCIE成神之路之数据预处理(5)——偏态数据处理

偏态数据处理 1.1 偏态数据三种处理方案1.1.1 实验背景1.1.2 实验目标1.1.3 实验数据解析1.1.4 实验思路1.1.5 实验操作步骤步骤1 导入相关模块和 Data_to_Transform.csv 数据集步骤2 平方根法步骤3 对数转换步骤4 Box-Cox转换 1.1 偏态数据三种处理方案 1.1.1 实验背景 许多…

Apollo自动驾驶:从概念到现实的里程碑

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言1. Apollo Client2. Apollo Server3. Apollo Federation4. Apollo Tracing5. Apollo Codegen6. Apollo Link7. 其他工具和框架结论 &#x1f680;&#x1f…

uni-app新建页面

新建页面 一、右键点击 pages 文件夹&#xff0c;点击新建页面。 二、输入页面名称、选择创建 vue 文件、勾选创建同名目录、选择默认模板、勾选在 pages.json 中注册、点击创建即可。 原创作者&#xff1a;吴小糖 创作时间&#xff1a;2023.12.28

【网络安全】有趣的基础知识

背景 逐条记录网络安全学习中有趣的内容和知识。 内容 CNNIC&#xff08;中国互联网络信息中心&#xff09;是中国国家域名.cn的管理组织。中国互联网络信息中心于1997年6月3日组建&#xff0c;现为工业和信息化部 直属事业单位 &#xff0c;行使国家互联网络信息中心职责。…

通过栈将中缀表达式转换为等价的后缀表达式

为什么要从中缀表达式转换为等价的后缀表达式&#xff1f; →使后缀表达式包含运算符优先级的信息&#xff0c;方便计算机能理解进行运算。 什么是中缀表达式&#xff1f; →中缀表达式虽然是人类看得懂的简单算术形式&#xff0c;但对计算机来说反而复杂难以理解 什么是后缀表…