T1 新的阶乘(factorial)
线性筛出质数和每个数的最小质因数,然后直接算即可。
T2 博弈树(tree)
结论:当且仅当起点为直径中心时,后手必胜。
证明:先考虑只在直径上的博弈,如果起点在直径的一端,先手必胜,设直径长为 \(len\),如果在端点的下一个位置,先手可以移动 \(len-2\) 到对称位置,此时后手只能移动到直径端点,先手必胜。考虑再下一个位置,先手还是先移动到对称位置,后手无论怎样移动,都是先手的必胜点。当且仅当起点为中心时,先手无法移动至必败点,此时先手必败。
因为直径是树的最长链,其他节点相当于直径上的点的复制点,所以整个树的博弈可以归纳到直径上。
然后对于直径长度的奇偶性简单分讨一下即可。
T3 划分(divide)
简单观察发现答案是只留一个极长段,剩下每段长度为一。
简单分几种情况:
- 我会特判!全是
0
,直接输出0
和方案数即可。 - 我还会一个特判!段数等于长度是只有一种方案,贡献是
1
的个数。 - 我是特判大师!没有一个开头为
1
的段满足长度,所以直接找第一个1
即可,方案数插板求得。
都想到最后一个特判了,不难想到对于一般情况就是找出极大段的数量,我会滑动窗口,但是这题要求取模,不能直接比较大小。一个经典的东西是两个数比较大小是,一定是比较第一个两个数不同的位置,所以可以二分加哈希找出这个位置。
对于最后一位,无论是什么,都无所谓,因为它的贡献在段内也是 \(1\),在段外也是 \(1\),所以只用比 \(len-1\) 的长度段即可。
哈希什么不确定算法,我会最小表示法,找到最大之后 KMP
即可,轻松爆标,笑点解析:没有哈希 + 二分跑得快