*B.Boxes
首先操作次数 m = ∑ a n ( n + 1 ) 2 m=\dfrac{\sum a}{\frac{n(n+1)}{2}} m=2n(n+1)∑a。
考虑差分得到 d i = a i − a i − 1 d_i=a_i-a_{i-1} di=ai−ai−1,对于一次以 i i i开始的操作, d i d_i di的变化是 n − 1 n-1 n−1,否则变化是 − 1 -1 −1。
全部取完后 d i = 0 d_i=0 di=0,所以设 i i i第一种操作做了 x i x_i xi次,第二种操作做了 m − x i m-x_i m−xi次, x i ( n − 1 ) − ( m − x i ) + d i = 0 → x i = m − d i n x_i(n-1)-(m-x_i)+d_i=0\to x_i=\dfrac{m-d_i}{n} xi(n−1)−(m−xi)+di=0→xi=nm−di
最后检查是否满足 ∑ x i = m \sum x_i=m ∑xi=m且按照操作 i i i得到的数 = a i =a_i =ai即可。
C.Cleaning
特判 n = 2 n=2 n=2的情况,其余情况必然存在一个点度数 > 1 >1 >1,将其作为根。
转化模型:
将每个叶结点上的
a
i
a_i
ai个石子看做
a
i
a_i
ai个插头,每次插头沿着结点父边向上走。
对于非叶结点,所有来自不同儿子结点的插头可以两两合并成一个双插头后停留在这个结点,剩余的单插头则继续向上走,且在这个结点上最多只能容纳
a
i
a_i
ai个单/双插头。
判断是否能够使得所有非叶结点上都能恰好容纳 a i a_i ai个插头,且最后不剩下单插头。
具体处理:
设对于非叶结点 i i i,一共传上来 f [ i ] f[i] f[i]个单插头,假设其中合并成了 a a a个双插头,剩下 f [ i ] − 2 a f[i]-2a f[i]−2a个单插头,且传上来单插头最多的一个儿子传了 m x mx mx个插头:
- a + ( f [ i ] − 2 a ) = A i a+(f[i]-2a)=A_i a+(f[i]−2a)=Ai
- a ≤ min ( f [ i ] − m x , ⌊ f [ i ] 2 ⌋ ) a\leq \min(f[i]-mx,\lfloor\frac{f[i]}{2}\rfloor) a≤min(f[i]−mx,⌊2f[i]⌋)
f [ i ] − A i > min ( f [ i ] − m x , ⌊ f [ i ] 2 ⌋ ) f[i]-A_i>\min(f[i]-mx,\lfloor\frac{f[i]}{2}\rfloor) f[i]−Ai>min(f[i]−mx,⌊2f[i]⌋)则无解,否则上传 2 A i − f i 2A_i-f_i 2Ai−fi个单插头即可。
D.Decrementing
考虑数中有
1
1
1的最终态,设所有数之和为
s
u
m
sum
sum:
若
s
u
m
−
n
sum-n
sum−n为奇数,则必胜,否则必败。
对于数中没有 1 1 1的情况:
- − 1 -1 −1后若 g c d gcd gcd为奇数, s u m sum sum的奇偶性保持不变。
- 故当且仅当 − 1 -1 −1后所有数变为偶数时, s u m sum sum的奇偶性才可能改变。
对于初始局面分类讨论:
- 若存在 A i = 1 A_i=1 Ai=1,直接转到最终态。
- 若 s u m − n sum-n sum−n为奇(必胜),因为所有数互质,所以必然存在至少一个奇数。先手可以使一个偶数变为奇数,使得后手永远无法取完所有奇数改变“先手必胜”的状态,那么先手必胜。(若所有数为奇,则先手可以任意取一个奇数变为偶数,特殊情况是总共只有2个奇数,但此时 s u m − n sum-n sum−n为偶数,与条件矛盾)
- 若 s u m − n sum-n sum−n为偶(必败),若奇数个数 ≠ 1 \neq 1 ̸=1,则先手必败。否则必然取掉唯一的奇数,将整个数列 / g c d /gcd /gcd,迭代下去操作。(最多迭代 log \log log次)
E.Rearranging
假设先手已经排好序了,那么答案就是最大字典序拓扑。
考虑如何构图使得最大字典序拓扑最小:
由于
N
≤
2000
N\leq 2000
N≤2000,暴力将两两互质的数之间连一条无向边,建立
d
f
s
dfs
dfs森林(每次选字典序最小的走)。对新图拓扑排序即可。
F.Tree Game
博弈论只需要从终态 P P P往前推,具体判定方法:
枚举根进行 d f s dfs dfs判定每颗子树的N/P状态:
如果一个子树必胜,那么必定存在根的一个儿子是必败结点,且权值小于根。
正确性显然(移到儿子后不移回来肯定必胜,否则不停地在这条边上移动最后儿子权值还是会变成0)