此题为GESP6级编程第一题.
你有一棵无穷个节点的二叉树,其每个节点的左子节点编号都是根节点的编号的2倍,其每个节点的右子节点编号都是根节点的编号的2倍+1. (说实话,就是完全二叉树) 你所在的节点的编号为s.
操作有三种:U第一操作,返回它的根节点;L第二操作,返回它的左子节点;R第三操作,返回它的右子节点.
第一行:两个整数n和s,其中n表示操作次数;
*第二行:一个长度为n的字符串,表示操作步骤.
仅包含一个整数,此整数为最后停留的节点编号.
样例输入:
3 2
URR
样例输出:
7
| n | s | 测试点占比 |
|---|---|---|
| *<3 | *<3 | 20% |
| <10 | *<106 | 20% |
| <106 | <1012 | 60% |
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
unsigned long long n,s,t;
string b;
cin>>n>>s>>b;
t=s;
for(int i=0;i<b.length();i++)
{
if(b[i]=='U')
{
if(t%2)
{
t--;
t/=2;
}
else
{
t/=2;
}
}
if(b[i]=='L')
{
t*=2;
}
if(b[i]=='R')
{
t*=2;
t++;
}
}
cout<<t;
return 0;
}
(前五个点过了,后五个点要用高精度?)