Codeforces 960D Full Binary Tree Queries ( 思维 && 模拟 )
题意 : 给出一颗无限层的满二叉树,然后每个值为 X (根的 X 等于 1 ) 左孩子的值是 2*X,右孩子的值是 2*X+1 ,现在有两种操作,(1, x,k) 表示将 x 所在层的所有节点整体向右循环地移动 k 个单位、(2,x,k)表示将 x 所在的层的所有节点及其子树向右循环地移动 k 个单位、(3,x)输出从 x 到根的路径
分析 :
第一个操作不难进行模拟
只要给每个层记录其偏移量,最后查询的时候依据偏移量来输出具体的值即可
关键是第二个操作
仔细一想,会发现一个规律
如果第一层移动 k 个单位
那么对于第二种操作,其孩子分别移动了 k*2^1、k*2^2、k*2^3……
所以其本质就是进行第一种操作,偏移量不一样了而已
查看了题目数据量之后发现每一次只进行到第 60 层
所以模拟到第 60 层就是回答所有问询了
#include<bits/stdc++.h> #define LL long long using namespace std; ; LL Move1[maxn];///正移动偏移量,方便知道原节点去了哪个位置 LL Move2[maxn];///反移动偏移量,方便知道原节点现在是什么值 inline void op1(int Lay, LL move, LL x, LL times) { ) Lay = log2(x) + ;///获取 x 在第几层 LL Base = 1LL<<(Lay-);///这一层有多少个节点 ) move %= Base;///如果非第二种操作 else move = ( (move % Base) * (times % Base) ) % Base;///第二种操作 Move1[Lay] = (( Move1[Lay] + move) + Base ) % Base;///正偏移量直接移动即可 Move2[Lay] = (( Move2[Lay] - move) + Base ) % Base;///反偏移量要反向移动 } inline void op2(LL move, LL x) { ; ; i<; i++,j++)///最多到60层 op1(i, move, , 1LL<<j); } inline void op3(LL x) { if(x == 1LL){ puts("); return; } printf("%I64d", x); ; LL Base = 1LL<<(Lay-); LL pos = (( (x - Base) + Move1[Lay] ) + Base) % Base + Base; while(!(pos == 3LL || pos == 2LL)){ ) pos = (pos - )>>;///找到当前节点的父亲节点 ; Lay = log2(pos) + ; Base = 1LL<<(Lay-); printf(" %I64d", ( (pos - Base + Move2[Lay]) + Base ) % Base + Base);///通过反向偏移量来获取在这个节点位置的值 }puts("); } int main(void) { int Q; scanf("%d", &Q); while(Q--){ int command; LL X, K; scanf("%d", &command); ){ scanf("%I64d %I64d", &X, &K); op1(-, K, X, -); }){ scanf("%I64d %I64d", &X, &K); op2(K, X); }else{ scanf("%I64d", &X); op3(X); } } ; }
Codeforces 960D Full Binary Tree Queries ( 思维 && 模拟 )的更多相关文章
- Codeforces 960D - Full Binary Tree Queries
960D - Full Binary Tree Queries 思路: 用move1[i]记录第i层第1种操作移动的个数(对这一层的个数取模) 用move2[i]记录第i层第2种操作移动的个数(对这一 ...
- hdu 6161--Big binary tree(思维--压缩空间)
题目链接 Problem Description You are given a complete binary tree with n nodes. The root node is numbere ...
- Codeforces 758C:Unfair Poll(思维+模拟)
http://codeforces.com/problemset/problem/758/C 题意:教室里有n列m排,老师上课点名从第一列第一排开始往后点,直到点到第一列第m排,就从第二列第一排开始点 ...
- codeforces C. Vasya And The Mushrooms (思维+模拟)
题意:给定一个2*n的矩形方格,每个格子有一个权值,从(0,0)开始出发,要求遍历完整个网格(不能重复走一个格子),求最大权值和,(权值和是按照step*w累加,step步数从0开始). 转载: 题解 ...
- codeforce 1311E. Construct the Binary Tree (构造,就是个模拟)
ACM思维题训练集合 You are given two integers n and d. You need to construct a rooted binary tree consisting ...
- Binary Tree(二叉树+思维)
Binary Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tota ...
- Codeforces 250 E. The Child and Binary Tree [多项式开根 生成函数]
CF Round250 E. The Child and Binary Tree 题意:n种权值集合C, 求点权值和为1...m的二叉树的个数, 形态不同的二叉树不同. 也就是说:不带标号,孩子有序 ...
- Binary Tree HDU - 5573 (思维)
题目链接: B - Binary Tree HDU - 5573 题目大意: 给定一颗二叉树,根结点权值为1,左孩子权值是父节点的两倍,右孩子是两倍+1: 给定 n 和 k,让你找一条从根结点走到第 ...
- 九章算法系列(#3 Binary Tree & Divide Conquer)-课堂笔记
前言 第一天的算法都还没有缓过来,直接就进入了第二天的算法学习.前一天一直在整理Binary Search的笔记,也没有提前预习一下,好在Binary Tree算是自己最熟的地方了吧(LeetCode ...
随机推荐
- vue2.X + HTML5 plus 拍照和调用设备相册 另附 图片转base64和压缩图片方法
HTML5 部分 <button @click="tesCamera()" type="button" :disabled="isshStatu ...
- 深入理解java:2.3.6. 并发编程concurrent包 之管理类---线程池
我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁 ...
- css实现毛玻璃效果
css实现毛玻璃效果,效果图 1,html代码 <div class="mainHolder"> <div class="textHolder" ...
- 运维日常之机房浪潮服务器硬盘红灯亮起,服务器一直响,raid磁盘红色。。。故障解决方法
按Ctrl+H进入到WebBIOS内,看见的错误如下所示: 错误是PDMissing,只不过维护的IBM服务器错误的磁盘不是第一块,而是第三块而已,不过坏哪块硬盘没有影响,重要的是错误的原因.这种错误 ...
- poj3252(数位dp)(模板)
题目链接:https://vjudge.net/problem/POJ-3252 题意:求[l,r]之间的Round Number数,RN数即化为二进制后0的个数不少于1的个数的数. 思路:之前用组合 ...
- Python常用方法库备忘(一)_当前路径下文件夹和文件
#!/usr/bin/env python # -*- coding:utf-8 -*- # --------------*-------------- # @Author : AilF # @Tim ...
- Redis 3主-3从集群的搭建(CentOS 7)
注意ip地址为: 虚拟机ip设置 TYPE="Ethernet"BOOTPROTO="static"NAME="enp0s3"DEVICE= ...
- 多个电脑上免密登陆命令、scp远程拷贝、修改文件的用户和组
多个电脑上免密登陆命令: 1.ssh-keygen 生成密钥 2.ssh-copy-id IP 拷贝公钥到指定服务器并授权 3.ssh Ip 验证登录,已无需输入密码 scp远程拷贝: ...
- 洛谷 P1801 黑匣子 题解
题面 离线处理: 大体思路就是将数组排序,然后对于第k次询问把不可行的数打上标记,然后从头开始寻找第k个没打标记的点的值(排序后的数组保证了它是第k小的). 实现方法:首先离散化原始数组,得到数组fi ...
- nginx正常启动,ip直接访问失败问题
1.查看iptables服务示范启动 service iptables status 2.没有安装的话安装 yum install iptables-services 3.修改配置文件, 添加一行: ...