HDU 6121 满k叉树 + 思维
来源:互联网 发布:淘宝剑三高洁丝 编辑:程序博客网 时间:2024/06/11 04:28
满k叉树 + 思维
题意:
给出n个节点,按照 公式给的方式建树,每一个节点儿子节点的个数加上自己本身就是它的size,求出n个节点的size的^值。
思路:
首先需要知道这个树是什么样子的,通过在本子上画图很容易发现这就是一个k叉树。
对于一个满的k叉树,其所有size的异或值就是size本身
通过这个性质发现,难点是在于怎么找到所有的子满k叉树,问题变成找到不满的k叉树的子树,然后知道其左边的兄弟树比其右边的兄弟树多了一层,对兄弟节点进行异或运算即可。然后通过这样找一直到最小的结构即可。不过在实现的过程中一直对最后一点不明白:
if(n-1 <= k) {if(n%2 == 0) ans ^= 1; break; }
希望能快速收到大佬的启发从而解决。
解决:
灵感闪现:在计算的过程中每次都对n进行了^运算,所以最后只是看叶子节点的是奇数就^1,叶子是奇数个意味着最小结构是偶数个节点。
#include <iostream>#include <cstdio>#include <cstring>using namespace std;typedef long long LL;int main(int argc, char const *argv[]){ freopen("in.txt","r",stdin); int tt; scanf("%d",&tt); while(tt--) { LL n,k; scanf("%lld%lld",&n,&k); if(k==1) { if(n%4 == 1) printf("1\n"); else if(n%4 == 2) printf("%lld\n",n+1); else if(n%4 == 3) printf("0\n"); else printf("%lld\n",n); continue; } LL ans = n; while(1) { if(n-1 <= k) { if(n%2 == 0) ans ^= 1; break; } LL arrangeFist = 1,arrangeNum = 1; while(0 <= arrangeFist + arrangeNum*k && arrangeNum*k + arrangeFist < n) { arrangeNum *= k; arrangeFist += arrangeNum; } LL lsonNum = (n-arrangeFist-1)/arrangeNum; LL rsonNum = k-lsonNum-1; LL lsonSum = lsonNum*arrangeFist; LL rsonSum = rsonNum*(arrangeFist-arrangeNum); //少了一层所以个数少了 if(lsonNum%2) ans ^= arrangeFist; if(rsonNum%2) ans ^= (arrangeFist-arrangeNum); n -= (lsonSum + rsonSum + 1); ans ^= n; } printf("%lld\n",ans); } return 0;}
阅读全文
0 0
- HDU 6121 满k叉树 + 思维
- [思维]K
- HDU 6121 思维 + DFS
- hdu 6121 分治+思维
- HDU 5122 K.Bro Sorting (14北京 思维模拟)
- hdu 5122(K.Bro Sorting, 简单思维题)
- hdu 5122 K.Bro Sorting【思维+树状数组】
- HDU-5102-The K-th Distance【思维】【好题】
- hdu 5122 K.Bro Sorting(思维+冒泡思想)
- hdu oj 6020 求给出一串数和一个K任意去点掉k个数能否被三整除(思维)
- HDU 4430Yukari's Birthday2012现场赛K题(幂打表 思维 枚举+二分)
- Problem K: Deadline----思维题
- A. K-Periodic Array----思维
- hdu 5101 思维题
- HDU 5223 - GCD (思维)
- HDU 5229 博弈思维
- hdu 思维风暴
- hdu 5288 思维技巧
- oracle单表查询
- Java线程学习(一)线程的创建和执行
- H
- Django 多 app 同名 模版 引用
- TensorFlow学习笔记2——数据类型及简单运算
- HDU 6121 满k叉树 + 思维
- 30分钟掌握ES6/ES2015核心内容(上)
- 01背包
- HDUoj 1575 Tr A ( 矩阵快速幂
- 支持向量机(SVM)
- 2018 拼多多
- mybatis-简介
- hdu2121(朱刘算法)
- Quartz定时调度器04