http://acm.hdu.edu.cn/showproblem.php?pid=6121

【题意】

  • 询问n个结点的完全k叉树,所有子树结点个数的异或和是多少

【思路】

  • 一棵完全K叉树,对于树的每一层,我们可以分为三种结点:
  1. 满k叉树的结点
  2. 不满的k叉树
  3. 比第一种情况少一层的满结点的k叉树

【AC】

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,k;
ll ans;
ll kn[],sz[],full[];
int cs;
void Pre()
{
//kn[i]=k^i
kn[]=;
for(int i=;i<=cs;i++)
{
kn[i]=kn[i-]*k;
}
//根结点为第一层,sz[i]为有i层的满k叉树有多少结点
sz[]=;
for(int i=;i<=cs;i++)
{
sz[i]=sz[i-]+kn[i-];
}
//有i层的满k叉树所有子树结点大小的异或和
if(k&)
{
full[]=;
for(int i=;i<=cs;i++)
{
full[i]=full[i-]^sz[i];
}
}
else
{
for(int i=;i<=cs;i++)
{
full[i]=sz[i];
}
}
} void dfs(int cur)
{
ans^=n;
ll lft=n-sz[cur]; //最后一层有多少个
ll l=lft/kn[cur-];//多少个cur层的满k叉树
lft-=l*kn[cur-];
if(lft==)//没有不满的k叉树
{
if(l&) ans^=full[cur];
if((k-l)&) ans^=full[cur-];
return;
}
if(l&) ans^=full[cur];
if((k-l-)&) ans^=full[cur-];
n--;n-=l*sz[cur];n-=(k-l-)*sz[cur-];
dfs(cur-);
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
ans=;
scanf("%I64d%I64d",&n,&k);
//k=1特判,打表看出来的
if(k==)
{
if(n%==)
{
ans=n;
}
else if(n%==)
{
ans=;
}
else if(n%==)
{
ans=n+;
}
else
{
ans=;
}
printf("%I64d\n",ans);
continue;
}
//根结点为第一层,结点数为n的完全k叉树有cs层是满的
cs=;
ll t=n;
while(t)
{
t--;
t/=k;
cs++;
}
//预处理
Pre();
ans=;
//递归
dfs(cs);
printf("%I64d\n",ans);
}
return ;
}

【思维】2017多校训练七 HDU6121 Build a tree的更多相关文章

  1. 【极角排序+双指针线性扫】2017多校训练七 HDU 6127 Hard challenge

    acm.hdu.edu.cn/showproblem.php?pid=6127 [题意] 给定平面直角坐标系中的n个点,这n个点每个点都有一个点权 这n个点两两可以连乘一条线段,定义每条线段的权值为线 ...

  2. 【(好题)组合数+Lucas定理+公式递推(lowbit+滚动数组)+打表找规律】2017多校训练七 HDU 6129 Just do it

    http://acm.hdu.edu.cn/showproblem.php?pid=6129 [题意] 对于一个长度为n的序列a,我们可以计算b[i]=a1^a2^......^ai,这样得到序列b ...

  3. hdu6035[dfs+思维] 2017多校1

    /*hdu6035[dfs+思维] 2017多校1*/ //合并色块, 妙啊妙啊 #include<bits/stdc++.h> using namespace std; ; const ...

  4. hdu6074[并查集+LCA+思维] 2017多校4

    看了标答感觉思路清晰了许多,用并查集来维护全联通块的点数和边权和. 用另一个up[]数组(也是并查集)来保证每条边不会被重复附权值,这样我们只要将询问按权值从小到大排序,一定能的到最小的边权和与联通块 ...

  5. 「2017 Multi-University Training Contest 7」2017多校训练7

    1002 Build a tree(递归) 题目链接 HDU6121 Build a tree 有一棵n个点的有根树,标号为0到n-1,i号点的父亲是\(\lfloor\frac{i-1}{k}\rf ...

  6. hdu6121 Build a tree 模拟

    /** 题目:hdu6121 Build a tree 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6121 题意:n个点标号为0~n-1:节点i的父节点 ...

  7. hdu6121 Build a tree

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6121 题面: Build a tree Time Limit: 2000/1000 MS (J ...

  8. HDU6038-Function-数学+思维-2017多校Team01

    学长讲座讲过的,代码也讲过了,然而,当时上课没来听,听代码的时候也一脸o((⊙﹏⊙))o 我的妈呀,语文不好是硬伤,看题意看了好久好久好久(死一死)... 数学+思维题,代码懂了,也能写出来,但是还是 ...

  9. 2017 多校训练 1002 Balala Power!

    Balala Power! Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

随机推荐

  1. 【C#】枚举

    枚举 public static class CommonEnums { public enum people { /// <summary> ///男人 /// </summary ...

  2. AJPFX总结集合的概念

    //java 中集合的概述==========================================================        集合的概念:              为 ...

  3. H+后台主题UI框架---整理(三)

    这里面介绍下H+后台主题UI框架里面插件的应用,不过都是最最简单最初级的功能.主要有日历插件,input单选多选(icheck)插件,input下拉搜索(chosen)插件. 一.日历插件 有如下几种 ...

  4. 使用NPOI操作Excel文件及其日期处理

    工作中经常遇到需要读取或导出Excel文件的情况,而NPOI是目前最宜用.效率最高的操作的Office(不只是Excel哟)文件的组件,使用方便,不详细说明了. Excel工作表约定:整个Excel表 ...

  5. 伟景行 citymaker 从入门到精通系列

    伟景行 citymaker 从入门到精通(1)——js开发,最基本demo,加载cep工程文件 伟景行 citymaker 从入门到精通(2)——工程图层树加载   伟景行 citymaker 从入门 ...

  6. ASP.NET MVC IIS7 403.14-Forbidden

    问题描述 IIS 7上发布ASP.NET MVC程序报错:403.14-Forbidden Web 服务器被配置为不列出此目录的内容 折腾了半天,提示里面的解决方法是: 如果不希望启用目录浏览,请确保 ...

  7. 无法登录phpmyadmin,报1130错误

    分析过程及解决方案: mysql的1130错误是远程连接的用户无远程权限问题导致.解决方案:在本机登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”loc ...

  8. pspad的一个怪现象:在一些空行的位置出现个别不该出现的字符

    在用pspad编辑一个外来文件时,发现有许多空行的结尾会出现一些单个字符,字符内容与翻页前那一页相应位置的字符相同. 好奇怪.上网找不到原因.pspad太好用了,不想因此放弃. 仔细观察,这些空行往往 ...

  9. codevs 1043 方格取数 2000年NOIP全国联赛提高组

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而 ...

  10. [Python學習筆記] 使用 selenium 抓取網頁並且雙擊滑鼠 (double click)

    一開始使用的時候 看官方文件 以為使用 double_click()即可 但後來出現錯誤 AttributeError: 'WebElement' object has no attribute 'd ...