题意:

给一个n个节点的完全k叉树,每个节点的值为以其为根节点的子树的节点数。问所有节点的异或值是多少。

思路:

思路很好想,注意细节就好。

代码:

#include <bits/stdc++.h>
#define LL long long
using namespace std;
int key;
LL n, k, ans, yu_sum, sum, num, up_k;
LL qpow(LL bas, int b)
{LL ans = 1;while(b){if(b&1) ans *= bas;bas *= bas;b >>= 1;}return ans;
}
LL xor_n(LL n)
{LL t = n & 3;  if(t & 1) return t/2ll^1; return t/2ll^n;
}
LL dfs(LL pre_sum, int deep)
{LL now_sum = qpow(k, deep);if(now_sum >= n-pre_sum) return n-pre_sum;LL res = dfs(pre_sum+now_sum, deep+1);if(key){sum = num = res, yu_sum = res%k;LL sl = res/k;if(yu_sum) ++sl;ans ^= (res+now_sum-sl)%2;LL mn_num = num/k;ans ^= (mn_num%2)*(k+1);if(yu_sum) ans ^= yu_sum+1;key = 0, res = 0, num /= k, up_k = k;return res+now_sum;}LL mn_num = num/k; num /= k;if(num) up_k *= k;if(num == 0){ans ^= (res/now_sum+sum+1);ans ^= ((now_sum-1)%2)*(res/now_sum+1);return res+now_sum;}if(now_sum == 1){ans ^= (res+sum+1);return res+now_sum;}LL geshu = (sum-yu_sum)/up_k;if((sum-yu_sum)%up_k == 0){ans ^= res/now_sum+yu_sum+1;}else{LL zans = (sum-yu_sum)-geshu*up_k;ans ^= (res/now_sum+zans+yu_sum+1);}ans ^= (geshu%2)*(res/now_sum+up_k+1);ans ^= ((now_sum-geshu-1)%2)*(res/now_sum+1);return res+now_sum;
}
int main()
{int t;//freopen("in.txt", "r", stdin);scanf("%d", &t);while(t--){scanf("%lld %lld", &n, &k);ans = 0, key = 1, yu_sum = 0;if(k != 1) dfs(0, 0);else ans = xor_n(n);printf("%lld\n", ans);}return 0;
}

继续加油~

HDU-6121 Build a tree - 2017 Multi-University Training Contest - Team 7(完全K叉树)相关推荐

  1. 2017 Multi-University Training Contest - Team 7:1002. Build a tree(递归)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...

  2. 2017 Multi-University Training Contest - Team 7:1003. Color the chessboard(...)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...

  3. 2017 Multi-University Training Contest - Team 7:1010. Just do it(组合数?)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...

  4. 2017 Multi-University Training Contest - Team 7:1008. Hard challenge(模拟)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...

  5. 2017 Multi-University Training Contest - Team 7:1011. Kolakoski(模拟)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...

  6. 2017 Multi-University Training Contest - Team 7:1005. Euler theorem(答案是(n+3)/2)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1003. Color the chessboard 2017 Multi-Univer ...

  7. 2017 Multi-University Training Contest - Team 3 Kanade's sum hd6058

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6058 题目: Kanade's sum Time Limit: 4000/2000 MS (J ...

  8. 2017 Multi-University Training Contest - Team 1

    2017 Multi-University Training Contest - Team 1 01     签到的 #include<bits/stdc++.h> using names ...

  9. HDU 3068 2017 Multi-University Training Contest - Team 1 1006 Fuction: 循环节+最后一步

    题意:给出一个0..n-1的全排列a,给出一个0..m-1的全排列b,现在要求计算函数F(定义域0..n-1 值域0..m-1)的个数,使得对所有的0..n-1的 i 都有 F(i)=b(F(ai)) ...

最新文章

  1. PostgreSQL在何处处理 sql查询之四十六
  2. expdp impdp中 exclude/include 的使用
  3. 学习Spring Boot:(十九)Shiro 中使用缓存
  4. 软件绿色联盟开发者大会惊喜不断,今日还有重磅议程!
  5. 三万字带你了解那些年面过的Java八股文
  6. java.lang.UnsupportedOperationException WebView is not allowed in privileged processes
  7. PHP输出100以内的质数(包括普通写法和数组形式输出)
  8. Arduino与Proteus仿真实例-AD5242数字电位器驱动仿真
  9. 【Android抓包】Mitmproxy使用
  10. Linux下编写GT911触摸驱动
  11. Unity3D-----简易游戏项目开发01
  12. discuzdiy图片模块_Discuz各类幻灯片的制作方法 - 完全支持DIY
  13. 【GAMES101】课堂笔记1--计算机图形学概述
  14. 聊一聊count的性能
  15. 山东 计算机专业,山东省内计算机专业大学排名?
  16. Stringtie详解
  17. web前端开发(一)
  18. C#中的委托和事件(分分钟上手)
  19. onReachBottom触底触发事件
  20. 三星支持android8.0,这些三星机型确认可以升级Android 8.0

热门文章

  1. 电商交易规律、RFM分类
  2. php-fpm status,使用php-fpm状态页观察当前的php-fpm状态
  3. 京东怎么做《IOS系统APP耗电量检测分析和优化》?
  4. oracle escape关键字用法
  5. 会声会影如何去除视频黑边
  6. 解决 - Adobe Acrobat/Adobe Reader 的 Windows 任务栏图标异常
  7. libvirt零知识学习6 —— libvirt源码编译安装(4)
  8. linux下的打包命令
  9. visual studio 错误:在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include StdAfx.h”?
  10. jdk API下载(英文的)