hdu6121 build a tree(树)
题解:
可以考虑每一层结点的子树大小
必定满足下面的情况,即
a,a,a,a,a,a,b,c,c,c,c........
然后每一层依次往上更新,结果是不变的
一共有logn层,所以依次扫上去,统计结果即可
注意到k=1的时候,是一条链,需要特殊处理orz
这个打表可以发现明显的规律,也是二进制的一种容斥吧
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long LL;
typedef long long ll;
LL n, k;
LL mypow(LL a, LL b){
if( pow((double)a, b) > 1.5e18) return 1e18;
LL ans = ; for(; b; b >>= ) { if(b&) ans *= a; a *= a; } return ans;
} int main()
{
int T;
cin>>T;
while(T--){
cin>>n>>k;
if(n == ){
cout<<<<endl;
continue;
}
if(k == ){
LL t = n%;
if(t == ) cout<<<<endl;
else if(t == ) cout<<n+<<endl;
else if(t == ) cout<<<<endl;
else cout<<n<<endl;
continue;
}
LL d = , sum = ;
while(sum + mypow(k, d) <= n) sum += mypow(k, d), d++;
if(sum == n){
d--;
LL ans = , sz = ;
while(d != -){
LL N = mypow(k, d);
if(N&) ans ^= sz;
sz = +sz*k;
d--;
}
cout<<ans<<endl;
continue;
}
LL N = n - sum, ans = ;
LL X = N, L = , R = , Xv = , D = d;
while(d){
LL dL = mypow(k, d);
ans ^= Xv;
if((X-)&) ans ^= L;
if((dL-X)&) ans ^= R;
LL Nl = X-;
LL Nx = Nl/k*k + , Nfx = X-Nx;
LL Ny = Nx+k-, Nfy = Ny-X;
Xv = Nfx*L + Nfy*R + Xv + ;
if((double)L*k < 1.5e18) L = +L*k;
R = +R*k;
X = (Nx-)/k + ;
d--;
}
ans ^= Xv;
cout<<ans<<endl;
}
}
hdu6121 build a tree(树)的更多相关文章
- hdu6121 Build a tree 模拟
/** 题目:hdu6121 Build a tree 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6121 题意:n个点标号为0~n-1:节点i的父节点 ...
- hdu6121 Build a tree
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6121 题面: Build a tree Time Limit: 2000/1000 MS (J ...
- 【思维】2017多校训练七 HDU6121 Build a tree
http://acm.hdu.edu.cn/showproblem.php?pid=6121 [题意] 询问n个结点的完全k叉树,所有子树结点个数的异或和是多少 [思路] 一棵完全K叉树,对于树的每一 ...
- 【暴力】hdu6121 Build a tree
给你n,K,让你构造出一颗n个结点的完全K叉树,求所有结点子树大小的异或和. 先把n号结点到根的路径提取出来单独计算.然后这条路径把每一层分成了左右两部分,每一层的左侧和其上一层的右侧的结点的子树大小 ...
- HDU 6121 Build a tree(找规律+模拟)
Build a tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)To ...
- HDU 5614 Baby Ming and Matrix tree 树链剖分
题意: 给出一棵树,每个顶点上有个\(2 \times 2\)的矩阵,矩阵有两种操作: 顺时针旋转90°,花费是2 将一种矩阵替换为另一种矩阵,花费是10 树上有一种操作,将一条路经上的所有矩阵都变为 ...
- Hdu 5274 Dylans loves tree (树链剖分模板)
Hdu 5274 Dylans loves tree (树链剖分模板) 题目传送门 #include <queue> #include <cmath> #include < ...
- POJ3237 Tree 树链剖分 边权
POJ3237 Tree 树链剖分 边权 传送门:http://poj.org/problem?id=3237 题意: n个点的,n-1条边 修改单边边权 将a->b的边权取反 查询a-> ...
- Tree( 树) 组件[4]
本节课重点了解 EasyUI 中 Tree(树)组件的使用方法, 这个组件依赖于 Draggable(拖动)和 Droppable(放置)组件.一.方法列表 //部分方法onClick : funct ...
随机推荐
- Element-ui树形控件el-tree获取父级节点的id
Element-ui官网给的方法 getCheckedKeys() { console.log(this.$refs.tree.getCheckedKeys()); }, 这种只有在所有子级都被选中的 ...
- 【vlan-给予mac地址认证】
根据项目需求搭建好如下的路由和交换拓扑图: 1:用pc1 ping pc2 使交换机捕捉到4台pc及的 mac地址 查看交换机学习到的mac地址情况 2:配置交换机和pc机之间的接口,根pc机的ma ...
- emlog博客插件分享openSug
emlog博客插件百度搜索下拉提示框openSug.js发布上线啦: 下载:https://www.opensug.org/faq/.../opensug.emlog_v1.0.0.zip[~4KB]
- Makefile中wildcard的介绍
在Makefile规则中,通配符会被自动展开.但在变量的定义和函数引用时,通配符将失效.这种情况下如果需要通配符有效,就需要使用函数“wildcard”,它的用法是:$(wildcard PATTER ...
- Make命令完全详解教程
Make命令完全详解教程 无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令.不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install.利用m ...
- 使用source命令解决mysql导入乱码问题
设定编码格式:mysql -u root -p --default-character-set=utf8 use dbname source /root/newsdata.sql
- android .9图制作
andorid .9 图,可用于适配各种屏幕.制作的时候,很简单. 在stadio 里面,把鼠标放到图片的边界,点一下.这时候,图片的边缘会有黑块. 然后把鼠标放到黑块上,发现可以拉伸区域了. 这个区 ...
- C# String函数
public static bool IsNullOrEmpty(string value) 如果 true 参数为 value 或空字符串 (""),则为 null:否则为 fa ...
- Accept 惊群现象测试perl脚本
$uname -a Linux debian-11-34 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt9-3~deb8u1 (2015-04-24) x86_64 G ...
- mcrouter facebook 开源的企业级memcached代理
原文地址:https://code.facebook.com/posts/296442737213493/introducing-mcrouter-a-memcached-protocol-route ...