GESP编程共123题,本题是整站第1452题,已经有人完成了本题,加油!
小杨有一棵包含无穷节点的二叉树(即每个节点都有左儿子节点和右儿子节点;除根节点外,每个节点都有父节点),其中根节点的编号为 1,对于节点 i,其左儿子的编号为 2×i,右儿子的编号为 2×i+1。
小杨会从节点 s 开始在二叉树上移动,每次移动为以下三种移动方式的任意一种:
小杨想知道移动 n 次后自己所处的节点编号。数据保证最后所处的节点编号不超过 1012。
第一行包含两个正整数 n 和 s,代表移动次数和初始节点编号。
第二行包含一个长度为 n 且仅包含大写字母 U、L 和 R 的字符串,代表每次移动的方式,其中 U 代表第 1 种移动方式,L 代表第 2 种移动方式,R 代表第 3 种移动方式。
输出一个正整数,代表最后所处的节点编号。
输入 #1
3 2 URR
输出 #1
7
小杨的移动路线为 2→1→3→7。
子任务编号 | 数据点占比 | n | s |
---|---|---|---|
1 | 20% | ≤10 | ≤2 |
2 | 20% | ≤50 | ≤10 |
3 | 60% | ≤10^6 | ≤10^12 |
对于全部数据,保证有 1≤n≤10^6,1≤s≤10^12。
参考程序
解析:首先想到的是模拟,但是在模拟的过程中需要注意若当前结点已经是根结点了就不要再向上跳了。
【10分代码】
为什么不能拿满分,S的范围是10^6 ~ 10^12,在计算的过程中很容易就超过long long 的范围,那怎么解决?高精度嘛?
不完全可以,10^6的运算 再加 高精处理 会有超时的风险,
那怎么做?为什么在计算的过程中会超过long long, 是因为L和R的操作,但是在L或R的操作前要是有u的操作,L或R的操作就可以被抵消
本站题目仅供学习,GESP版权归CCF所有,如有侵权请联系删除。站长陈老师QQ及微信:208234。