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 ...
随机推荐
- webpack打包之后背景图不显示的问题
修改build/utils.js文件里面的ExtractTextPlugin,添加:publicPath: ‘…/…/’,具体代码如下:
- 【linux基于Postfix和Dovecot邮件系统的搭建】
一:PostFixe和Dovecot的简单介绍 Postfix postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件.postfix是Wietse Ven ...
- Python 一些好玩的函数
一.匿名函数 什么匿名是函数: 不需要使用def函数名的函数或者子程序 函数语法: lambda 参数:表达式 函数特点: 1.lambda只是一个表达式,省去定义函数过程,让代码更精简 2.lamb ...
- 基于pyecharts的IT各行业薪资展示
我们的项目是一个信息采集系统,采集的是51job招聘网站,我爬取了Python,Java,C++,PHP还有北京各地区的职位数量,以及经验要求,和学历要求等等. 网页头; <!DOCTYPE h ...
- Django自带后台使用配置
参考官网地址:https://docs.djangoproject.com/en/1.11/ref/contrib/admin/ ,本文章值是介绍简单配置,如果需要详细内容可以查阅官方文档 自动管理界 ...
- Linux 控制台
shell shell命令分为两种:分别是内部命令和外部命令. 内部命令:在安装的时候嵌入系统内核. 外部命令:以文件的形式存在. 可以使用type命令查看是内部命令还是外部命令. Linux中,默认 ...
- 2002: [Hnoi2010]Bounce 弹飞绵羊
2002: [Hnoi2010]Bounce 弹飞绵羊 https://www.lydsy.com/JudgeOnline/problem.php?id=2002 分析: 绵羊在弹飞的路径中相当于一棵 ...
- P1991 无线通讯网
P1991 无线通讯网 题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫 ...
- (转) Sqoop使用实例讲解
原博客地址:http://blog.csdn.net/evankaka 摘要:本文主要讲了笔者在使用sqoop过程中的一些实例 一.概述与基本原理 Apache Sqoop(SQL-to-Hadoop ...
- python 产生有序整数序列
其中一种方法 A = np.linspace(0,n,n)