T1
正解应该是用桶存一下每个数,枚举 gcd 判断桶内是否有 \(n\) 个数是其倍数。
由于 \(a_i\) 和 \(a_i+1\) 是互质的,所以一个数不会在同一个 gcd 处统计两次,保证了答案的正确性。
注意此时值域是 \(10^6+1\) 的。
然而这题好多水法可以过。。。数据是真的水。
T2
一眼看去真的不会做QwQ绝对不是我不认真打比赛。
最终还是找规律的……非完全归纳法永远的神!
结论是:先找出最大的 \(2^k \le nm\) ,第一问答案一定是 \(2^{k+1}-1\) 。但凡打个表都知道
- 如果 \(2^k\) 不在行首,那么它左侧一定有 \(2^k-1\) ,就取这两个。
- 否则, \(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$ 阶点的情况由归纳假设知必败。
能力所限就只能写到这里啦