题目链接
题意
给一个$k$叉树,已知总结点数,计算所有结点$size$大小的异或和。
思路
我们可以把一层中相同大小的结点一起计算。若是一棵满$k$叉树,我们可以得到它的层数其实是很少的。最后一层的每个结点只有三种情况:
要么是满$k$的,要么是空的,要么是不满的。
我们可以把层数向下扩展,模拟出后面的大小,然后每一层计算相同的个数,异或到答案里面去。
Code
1 |
|
对于$k=1$情况的特判貌似还是个结论。1
2
3
4
5
6
7
8if(k==1){
ll x=n%4;
if(x==0) printf("%lld\n",n);
else if(x==1) printf("1\n");
else if(x==2) printf("%lld\n",n+1);
else printf("0\n");
continue;
}