题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6121

题意:一个n个点的完全k叉树,求每个节点的size的异或和。

解法:容易发现,考虑根的所有孩子,最多只有一个不是满k叉树,我们只要把这个子节点作为临界点,其左边的就是满k叉树,其右边的便是比左边层数小一的满k叉树,那么我们每次只要算出中间这个非满k叉树的节点个数即可,然后对这个孩子进行递归处理。而其他子树由于是满k叉树,其数量可以提前预处理出来。这样处理在k>2的时候复杂度是logk(n)的,但是当k等于1时速度很慢会T,所以直接特判k=1的情况。

//HDU 6121
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL n, k, ans, num[105];
LL qsm(LL a, LL n){
LL ret=1;
while(n){
if(n&1) ret=ret*a;
a=a*a;
n>>=1;
}
return ret;
}
void init(LL k, LL dep)
{
for(int i=1; i<=dep; i++){
num[i] = (qsm(k,i)-1)/(k-1);
}
}
int main()
{
int T;
scanf("%d", &T);
//freopen("1.in","r",stdin);
while(T--)
{
scanf("%lld%lld", &n,&k);
if(k == 1){
LL temp=n%4;
if(temp==0) printf("%lld\n", n);
else if(temp==1) printf("%lld\n",1LL);
else if(temp==2) printf("%lld\n", n+1);
else printf("%lld\n", 0LL);
continue;
}
int dep = 1;//树高
LL res=n-1;
while(res){
res=(res-1)/k;
dep++;
}
init(k,dep);
ans = n; //根节点为0的子树
ans ^= (n-num[dep-1])&1;//最后一层有多少个节点
dep--;
LL pos=(n-1-1)/k;//临界点在当前层标号为pos的子树上
int now = 2;//从下往上第几层,最后一层已经处理了
while(dep>1){
LL left=num[dep-1];//当前层最左边节点的编号
LL right=num[dep]-1;//当前层最右边的节点的编号
LL temp1=num[now];//当前层满k叉树的子节点个数
LL temp2=num[now-1];//当前层满k叉数层数减1后的子节点个数
if((pos-left)&1){
ans^=temp1;
}
if((right-pos)&1){
ans^=temp2;
}
LL cnt=pos;
while(cnt<=(n-1-1)/k){//cnt*k+1<=n-1会爆long long
cnt=cnt*k+1;
}
ans ^= num[now-1]+n-cnt;//当前点的子树特殊处理
now++;
dep--;
pos=(pos-1)/k;
}
printf("%lld\n", ans);
}
return 0;
}

2017多校第7场 HDU 6121 Build a tree K叉树,思维的更多相关文章

  1. 2017多校第9场 HDU 6161 Big binary tree 思维,类似字典树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6161 题意: 题目是给一棵完全二叉树,从上到下从左到右给每个节点标号,每个点有权值,初始权值为其标号, ...

  2. 2017多校第8场 HDU 6138 Fleet of the Eternal Throne 思维,暴力

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6138 题意:给了初始区间[-1,1],然后有一些操作,可以r加上一个数,l减掉一个数,或者同时操作,问 ...

  3. 2017ACM暑期多校联合训练 - Team 7 1002 HDU 6121 Build a tree (深搜+思维)

    题目链接 Problem Description HazelFan wants to build a rooted tree. The tree has n nodes labeled 0 to n− ...

  4. HDU 6121 Build a tree(完全K叉树)

    http://acm.hdu.edu.cn/showproblem.php?pid=6121 题意:给你一颗完全K叉树,求出每棵子树的节点个数的异或和. 思路: 首先需要了解一些关于完全K叉树或满K叉 ...

  5. HDU 6121 Build a tree(k叉树的子树大小相异)

    http://acm.hdu.edu.cn/showproblem.php?pid=6121 题目大意: 给你一颗 n 个节点的完全 k 叉树,问你这棵树中所有子树结点个数的总异或值. 分析: 我们很 ...

  6. HDU 6121 Build a tree(找规律+模拟)

    Build a tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)To ...

  7. 2017多校第9场 HDU 6170 Two strings DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6170 题意:给了2个字符串,其中第2个字符串包含.和*两种特别字符,问第二个字符串能否和第一个匹配. ...

  8. 2017多校第9场 HDU 6169 Senior PanⅡ 数论,DP,爆搜

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6169 题意:给了区间L,R,求[L,R]区间所有满足其最小质数因子为k的数的和. 解法: 我看了这篇b ...

  9. 2017多校第10场 HDU 6181 Two Paths 次短路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6181 题意:给一个图,求出次短路. 解法:我之前的模板不能解决这种图,就是最短路和次短路相等的情况,证 ...

随机推荐

  1. CSS3 transform rotate(旋转)锯齿/元素抖动模糊的解决办法

    使用CSS3 3D transforms,通过GPU来渲染,能有效的起到抗锯齿效果.只要在CSS3 transform属性中加入translateZ(0).例:-webkit-transform: r ...

  2. A表数据插入到B表(表结构不一致)

    D_A  有E\F\H 3字段 D_B 有 A\B\C\D\E\ID 字段 将 D_B 个别字段插入到D_A  表 INSERT INTO  D_A(E,F,H) select B,A,ID from ...

  3. HDU5446:Unknown Treasure——题解

    http://acm.hdu.edu.cn/showproblem.php?pid=5446 求C(n,m)%(p1p2…pk)的值,其中pi均为质数. 参考:https://www.cnblogs. ...

  4. php ul li 分类

    <?phpfunction do_tree($arr,$pid){ echo "<ul>"; foreach ($arr as $key => $value ...

  5. IDEA的使用总结篇-1

    随笔:随着回首所在的公司的日益扩大,所在的技术中心也日渐兵强马壮,但由于各位新老同仁的开发工具一直未曾统一,所以小编的老大终于一声令下,统一开发工具!统一使用IDEA,而且每个人今天要交一份IDEA的 ...

  6. ipython 安装和更新

    pip install ipython pip install --upgrade ipython pip install --upgrade pip 不管是用pip装什么模块,前面都尽量不要加sud ...

  7. 【DP】【Uva437】UVA437 The Tower of Babylon

    传送门 Description Input Output Sample Input Sample Output Case : maximum height = Case : maximum heigh ...

  8. Django Model 数据表

    Django Model 定义语法 版本:1.7主要来源:https://docs.djangoproject.com/en/1.7/topics/db/models/ 简单用法 from djang ...

  9. java 在centos6.5+eclipse环境下调用opencv实现sift算法

    java 在centos6.5+eclipse环境下调用opencv实现sift算法,代码如下: import org.opencv.core.Core; import org.opencv.core ...

  10. 面包旅行Android业务设计分析

    面包旅行的业务设计不错,Android app也是清晰简洁又大方的样子,所以画了个业务脑图出来. 重要的几个业务特点分析如下: 1.账号绑定社交账号,方便社交推广 2.城市猎人活动,通过内容.时间.地 ...