题解 | #法#

https://ac.nowcoder.com/acm/contest/11226/A

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 题想不到试根,可能需要稍微多花一点时间。

全部评论
反了反了,BC 顺序反了,这是原来的题解,大家注意一下哈~
点赞 回复
分享
发布于 2022-05-06 21:26
可以讲一下D题怎么用试根法做吗
点赞 回复
分享
发布于 2022-05-06 21:33
滴滴
校招火热招聘中
官网直投
找到了,谢谢
点赞 回复
分享
发布于 2022-05-06 21:40
试根法是指当一个多项式的系数不确定时,通过尝试令 t=x(t 是主元),若原式的值恰好为 0,则原式必含 (t-x) 这一因式,D 题中 t = 0 和 t = ±1 时原式的值均为零,据此应为 t(t-1)(t+1),另外再代入一个 t=2 即可得到常数项为 1/6. 这样做的好处是比直接把方程设成通俗的 f(t) = at^3+bt^2+ct+d 计算量小,在初中数学中经常与多项式除法结合做因式分解,这里用过来会方便一些,但是还是建议不熟练的同学用我 b 站上讲的待定系数法。
点赞 回复
分享
发布于 2022-08-20 08:35 安徽

相关推荐

10 收藏 评论
分享
牛客网
牛客企业服务