A

异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用 11 表示真,00 表示假,则异或的运算法则为:00=00⊕0=010=11⊕0=101=10⊕1=111=01⊕1=0(同为 00,异为 11),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。

假定相同位上分别是 xxyyx,y[0,k)x,y\in[0,k) 那么在 kk 进制下 x+yx+y 不进位加法的结果:x+ymodkx+y\mod k 取模运算 %

B

注意到 and 运算意味着取交集,or 意味着取并集,因此 and 和 or 结合后就相当于找出集合 AA 满足:AABB 的子集且 BBAA 的子集,因此 A=BA=B

据此原式即为 XORi=1nai\text{XOR}_{i=1}^{n} a_i

C

暴力模拟即可通过本题。

另外由于 bitset 可以快速处理类似的运算,合理利用可以简化码量。

综上本题可以有:①暴力;②bitset;③map作桶 大致三种办法,经过内测群讨论,放宽时限后都可以通过。

D

首先根据二次函数图象答案很明显是 S(a)S(b)|S(a)-S(b)|:第一种方法是 i2\sum i^2 的公式为 n(n+1)(2n+1)6\dfrac{n(n+1)(2n+1)}{6} 代入硬算,第二种方法是由于整个式子化出来可以预测是一个三次式,因此试根法可以得到最后的答案为:t=bat=b-at×(t21)6\dfrac{t \times (t^2 - 1)}{6}

E

倒着考虑每一个位置的情况即可:对于第 ii 个位置,分两种情况,一则从这个点开始,则战斗力必须大于等于该点;二则从它的“前”面开始,则战斗力必须满足加上前面的点后大于等于该点。后者可以转化成战斗力逐渐递减,则本题解决。

F

观察性质,可以发现第一次 M 操作之后的所有子树两边对称。

因此可能的直径只会有这两种情况:

  1. 以第一次 M 操作的父亲结点为根,向两头延伸到某两个最深结点。
  2. 整棵树从上到下拎一遍(结果钦定为 n+3n+3)。

最终查找第一个 M 字符的位置并列式计算即可。

Summary

E、F 两个题讲评的时候会具体讲解一些文字较难表达清楚的内容,敬请期待。

总体来讲还是思维场,如果你 C 题想不到 bitset 或者 D 题想不到试根,可能需要稍微多花一点时间。