Codeforces 792D
题意:给定一棵拥有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的更多相关文章
- 【codeforces 792D】Paths in a Complete Binary Tree
[题目链接]:http://codeforces.com/contest/792/problem/D [题意] 给你一棵满二叉树; 给你初始节点; 给你若干个往上走,左走,右走操作; 让你输出一系列操 ...
- codeforces 792D - Paths in a Complete Binary Tree
#include<cstdio> #include<iostream> #define lowbit(x) x&(-x) typedef long long ll; u ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- CodeForces - 662A Gambling Nim
http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...
- CodeForces - 274B Zero Tree
http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...
- CodeForces - 261B Maxim and Restaurant
http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...
随机推荐
- saturne installation on Ubuntu
test installation Table of Contents 1. installation guide 1 installation guide saturne_installation. ...
- 介绍一个比较酷东西:HTML5 桌面通知(Notification API)
Notification API 是 HTML5 新增的桌面通知 API,用于向用户显示通知信息.该通知是脱离浏览器的,即使用户没有停留在当前标签页,甚至最小化了浏览器,该通知信息也一样会置顶显示出来 ...
- PAT 1133 Splitting A Linked List
Given a singly linked list, you are supposed to rearrange its elements so that all the negative valu ...
- Arduino 测试空气质量等级模块 ZP07-MP503 测试
最近入手空气质量模块 ZP07-MP503,用Arduino采样数据进行测试 先上图看看 ZP07-MP503 产品 ZP07-MP503 一共4个管脚,功能如下 5V 电源输入5V GND 电源输 ...
- 【GC概述以及查看堆内存使用】Java内存管理和GC学习
内存划分 1.JAVA内存主要划分为方法栈.方法区.堆. 2.方法栈上内存会自动释放: 3.方法区上主要加载了类的元信息.静态变量.常量.改区域又称为持久代(Perm Gen),默认是最小16M,最大 ...
- POJ——1061 青蛙的约会
青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 117858 Accepted: 24599 Descript ...
- Spring关于使用注解@Configuration去配置FormattingConversionServiceFactoryBean来实现自定义格式字符串处理无效的问题(未找到是什么原因造成的)
说明:在Spring MVC和Spring Boot中都能正常使用. 首先,我实现了一个自定义的注解,@Trimmed去除字符串String的前后空格. 如果是在Spring MVC的XML配置中,可 ...
- ubuntu 搭建 svn服务器,使用http方式访问
原文: http://blog.csdn.net/wobuxingfang/article/details/70835414 参考:http://www.cnblogs.com/zzugyl/p/36 ...
- 如何让图片开口说话 3DMeNow教程
菜鸟玩3D--3DmeNow初级教程 3D软件对于我们这些菜鸟来说,一直是可望而不可及的一种东西,深奥的3D建模,复杂的面板操作--都使我们对之望而却步,有没有一种很简单的3D造型软件,使我们这些菜鸟 ...
- 使用Jsoup解析和操作HTML
jsoup 简单介绍 jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套很省力的API,可通过DOM.CSS以及类似于jQuery的操作方法来取 ...