题意:给定一棵拥有n个节点的满二叉树(即n==2^x-1),q个查询,每次给出一个节点的编号,再给出一个由L,R,U组成的字符串序列,依次表示向左子节点、右子节点、父节点移动,如果移动不合法,则忽略。问字符串序列结束后所在节点的编号。具体编号可看:http://codeforces.com/problemset/problem/792/D

解题思路:

  随意的画了一下树的编号,发现了一定的规律,如最左边的一定是2的幂,同高度的节点与之构成一个等差序列等,但这仍不足以帮助我们解决问题,最主要的比如判断当前节点是其父节点的左子节点还是右子节点、判断当前节点的高度等,然后不小心看到了题目的标签bitmask,画了一下各编号的二进制形式,规律就一目了然了:

  最底层数字,其二进制形式,从右数起的第一个非零位的位置必为最右;倒数第二层,倒数第二右;以此类推——于是高度判断解决。

  每一个节点,如果它为其父节点的左子节点,那么第一个非零位置左边的位置必为0,否则必为1。

  从父节点到子节点,首先是非零位置向右移一位,同时根据是左还是右来决定原非零位置为0或是为1。

  看起来很莫名但其实与最开始发现的那个“规律”是一一对应的,比如同一层的节点中,之前已发现其为等差序列,且差为2^高度,因此该二进制位必然是1和0交替出现;左子节点和右子节点的差别,则是因为最开始(2的幂)是0,而后是1,再是0,再是1……

  找到规律之后,代码就很简单了,几行位运算而已。

  这题主要启发了我这种树的编号、等差、二进制形式间可能存在的关系。

  代码如下:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
#define sqr(x) ((x)*(x))
const int N=1e5+,mod=1e9+;
ll n,u;
int q,mx;
char s[N];
int main(){
//freopen("in.txt","r",stdin);
while(~scanf("%I64d%d",&n,&q)){
mx=;
while(1LL<<mx!=n+) mx++;
while(q--){
scanf("%I64d%s",&u,s);
int len=strlen(s);
int pos=;
while(!(u&(1LL<<pos))) pos++;
for(int i=;i<len;i++){
if(s[i]=='L'){
if(!pos) continue;
u^=(1LL<<pos);
pos--;
u^=(1LL<<pos);
}else if(s[i]=='R'){
if(!pos) continue;
pos--;
u^=(1LL<<pos);
}else{
if(pos+==mx) continue;
u^=(1LL<<pos);
pos++;
if(!(u&(1LL<<pos)))
u^=(1LL<<pos);
}
}
printf("%I64d\n",u);
}
}
return ;
}

Codeforces 792D的更多相关文章

  1. 【codeforces 792D】Paths in a Complete Binary Tree

    [题目链接]:http://codeforces.com/contest/792/problem/D [题意] 给你一棵满二叉树; 给你初始节点; 给你若干个往上走,左走,右走操作; 让你输出一系列操 ...

  2. codeforces 792D - Paths in a Complete Binary Tree

    #include<cstdio> #include<iostream> #define lowbit(x) x&(-x) typedef long long ll; u ...

  3. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  4. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  5. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  6. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  7. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  8. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  9. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

随机推荐

  1. 框架之---Flask

    Flask是一个轻量级的WEB框架,它和Django相比,就是一个胖子和一个骨架的区别. Flask是一个py文件就可以run的web框架,但是就因为是py文件就能run,所有,啥都没有,等把Flas ...

  2. INT32 System_UserKeyFilter(NVTEVT evt, UINT32 paramNum, UINT32 *paramArray)

    INT32 System_UserKeyFilter(NVTEVT evt, UINT32 paramNum, UINT32 *paramArray){    UINT32 key = evt; if ...

  3. ISO7220M芯片调试总结

    3.3V或者5V供电        速度可以达到150Mbps      有25年的寿命 调试问题总结: 在调试中发现,芯片焊接的时候很容易损坏,甚至350度焊接,时间在5s的时间都会坏掉.当坏掉的时 ...

  4. java 反射运用

    一,获取私有的属性,方法,构造器(俗名:暴力反射) 现有一个类,属性,方法,构造器均为私有的,如何创建实例对象,更该属性值,调用方法? public class Student { private S ...

  5. 【02】Node.js 安装配置(OK)

    [02] Node.js 安装配置 本章节我们将向大家介绍在window和Linux上安装Node.js的方法. Node.js安装包及源码下载地址为:http://www.nodejs.org/do ...

  6. [luoguP1351] 联合权值(Dfs)

    传送门 距离为2的点会产生权值,第一问,只需要在dfs的时候把一个点相邻的点都处理出来就行. 具体处理方式看代码,然而这样只处理了一遍,最后在乘2就好了. 第二问只需要处理一个点相邻的点中最大的和次大 ...

  7. 转载 - Struts2拦截器配置

    出处:http://blog.csdn.net/axin66ok/article/details/7321430 目录(?)[-] 理解拦截器 1 什么是拦截器 2 拦截器的实现原理 拦截器的配置 使 ...

  8. 转载 - Struts2基于XML配置方式实现对action的所有方法进行输入校验

    出处:http://www.cnblogs.com/Laupaul/archive/2012/03/15/2398360.html http://www.blogjava.net/focusJ/arc ...

  9. 【GC分析】Java GC日志查看

    Java中的GC有哪几种类型? 参数 描述 UseSerialGC 虚拟机运行在Client模式的默认值,打开此开关参数后, 使用Serial+Serial Old收集器组合进行垃圾收集. UsePa ...

  10. 高数(A)下 第十章

    10.1 10.2 10.3 10.4 10.5 10.7 自测题