牛客挑战赛57总结

T1

正解应该是用桶存一下每个数,枚举 gcd 判断桶内是否有 \(n\) 个数是其倍数。
由于 \(a_i\)\(a_i+1\) 是互质的,所以一个数不会在同一个 gcd 处统计两次,保证了答案的正确性。
注意此时值域是 \(10^6+1\) 的。
然而这题好多水法可以过。。。数据是真的水。

T2

一眼看去真的不会做QwQ绝对不是我不认真打比赛。
最终还是找规律的……非完全归纳法永远的神!
结论是:先找出最大的 \(2^k \le nm\) ,第一问答案一定是 \(2^{k+1}-1\)但凡打个表都知道

  1. 如果 \(2^k\) 不在行首,那么它左侧一定有 \(2^k-1\) ,就取这两个。
  2. 否则, \(m\) 一定是奇数,取该行和上一行的中间项。

实际上,第二种情况是 \((2^k + a-1) xor (2^{k} -a) = (2^k + a-1) + (2^{k} -a)=2^{k+1}-1\)
即二者没有交,前者是 \(2^k\) 加上 \(a-1\) ,在 \(0\) 上添加了若干 \(1\),后者是 \(2^k-1\) 减去 \(a-1\) ,在一堆 \(1\) 里扣掉了几个。

T3

直接树剖啦不讲。

T4

比赛还有几分钟的时候想出来了,没有时间写QAQ
先找出直径的中点(可以是一条边的中点),设为 \(S\)

Def 定义距离中点 \(S\) 距离为 \(k\) 的点为 \(k\) 阶点。(\(k\) 可以是实数)

Lemma:第一次走到 \(k\) 阶点,且两人都没有踏上过 \(\ge k\) 阶点,必败。

使用数学归纳法,若是直径端点显然成立,另一人只需走直径,他就无路可走。
否则,此时另一人可以同样走到 \(k\) 阶点,那么他也不能再走到 \(\le k\) 阶点,而走到 $ > k$ 阶点的情况由归纳假设知必败。

能力所限就只能写到这里啦

posted @ 2022-02-19 21:37  Kelvin2005  阅读(69)  评论(0)    收藏  举报