COMPFEST 14 部分题解(ABCEFGHKLM)

A. Accumulation of Dominoes

签到题,如果 m=1m = 1 输出 n1n - 1,否则输出 n(m1)n \cdot (m - 1)

B. Basketball Together

贪心,排序后用大的数配小的数。

C. Circular Mirror

直径所对圆周角为 90 度,所以当直径上两个点颜色相同时,其他的点不能与直径的颜色相同。设直径的条数为 dd,于是我们可以枚举直径颜色相同的条数 kk,首先选 kk条直径,然后为每条直径选一个颜色,然后从剩下的 MkM - k 个颜色中给剩下的每条直径选两个颜色,再从剩下的 MkM - k个颜色中给每个剩下的非直径的点选一个颜色,所以答案为: k=0min(d,M)(dk)(Mk)k!((Mk2)2!)dk(Mi)N2d\sum_{k=0}^{\min(d, M)} {d \choose k}{M \choose k}k!\left({M - k \choose 2}\cdot 2!\right)^{d - k}(M - i)^{N - 2 * d}

E. Electrical Efficiency

考虑每条边对答案的贡献,遍历所有质数,设当前的质数为 pp,令 SS 为因子含 pp 的点的集合,当 x,y,zSx, y, z\in S 中任意两点的路径经过某条边时,该边会对答案产生 1 的贡献。以任意点为根,对边 (u,v)(u, v)uuvv 的父亲)来说,有(S3)(s3)(Ss3)\binom{|S|}{3} - \binom{s}{3} - \binom{|S|-s}{3}ssvv 子树的大小)个三元组经过这条边,用树型 dp 就能求解,但要是对于每个质数都遍历一遍整个树的话必然要超时所以我们以 SS 中的点构造虚树,在虚树上跑 dp,由于 AxA_x 最多有 log(Ax)\log(A_x) 个不重复的质因子,所以所有 S|S| 的和是 O(Nlog(max(A)))O(N\log(\max(A))) 的。

F. Field Photography

OR 的条件很好满足:只要先都往右移动若干个 WW 就可以了,不难看出最小的移动单位为LSB(W)LSB(W)(Least Significant Bit,最低位),所以线段覆盖的点的位置模LSB(W)LSB(W)是不变的,于是这个问题就变成了模LSB(W)LSB(W)意义下的线段覆盖问题。由于LSB(W)LSB(W)只有 31 种情况,可以预处理然后O(1)O(1)回答询问。

G. Garage

不会数学,打表+OEIS查的。。。

H. Hot Black Hot White

首先不难证明 concat(Ai,Aj)mod3=(Ai+Aj)mod3\operatorname{concat}(A_i, A_j)\bmod 3 = (A_i + A_j) \bmod 3。于是题目中的等式就变成了:

concat(Ai,Aj)×concat(Aj,Ai)+AiAjZmod3 (Ai+Aj)(Ai+Aj)+AiAjZmod3 Ai2+2AiAj+Aj2+AiAjZmod3 Ai2+Aj2+3AiAjZmod3 Ai2+Aj2Zmod3\begin{align*} \text{concat}(A_i, A_j) \times \text{concat}(A_j, A_i) + A_i A_j & \equiv Z \mod 3 \\\ (A_i + A_j) (A_i + A_j) + A_i A_j & \equiv Z \mod 3 \\\ A_i^2 + 2 A_i A_j + A_j^2 + A_i A_j & \equiv Z \mod 3 \\\ A_i^2 + A_j^2 + 3 A_i A_j & \equiv Z \mod 3 \\\ A_i^2 + A_j^2 & \equiv Z \mod 3\end{align*}

然后可以发现 Ai2mod3A_i^2\bmod 3 只可能是 0 或者 1。于是我们得到两种情况:

  • 如果 Ai2mod3=0A_i^2\bmod 3 = 0 的石头的个数小于等于N2\frac N 2的话,将所有 Ai2mod3=0A_i^2\bmod 3 = 0 的时候分到一组并取Z=2Z=2就可以避免上述等式成立。
  • 否则 Ai2mod3=1A_i^2\bmod 3 = 1 的石头的个数小于等于N2\frac N 2,类似地我们将Ai2mod3=1A_i^2\bmod 3 = 1 的石头分到一组并取Z=0Z=0

K. Kingdom of Criticism

由于第三种询问会使高度的种类减小 2 到若干种而第一种询问只会使高度的种类增加 1,所以所有第三种操作减少的高度的种类不超过 K+QK + Q (KK为初初始的高度的种类)。所以可以将高度相同的建筑归为一组,第三种操作也就相当于把高度在 [L,R][L, R] 中的建筑与高度为 L1L - 1 的建筑或高度为 R+1R + 1 的建筑合并(根据离哪个端点近)。于是我们想到可以使用并查集来实现合并操作,同时记录每个高度的组在并查集中所对应的树的根,这样可以快速知道高度在并查集中所对应的树。但第一种询问对应的却是一种删除的操作,但并查集不支持删除操作,所以我们直接给建筑 kk 赋予一个新的编号,这样就变相实现了删除的效果。

L. Lemper Cooking Competition

观察到操作对于前缀和数组的影响就是交换位置 i1i - 1 与位置 ii,由于最后要求 AiA_i 为非负,那么最终的前缀和数组便是非降的,于是问题就变成了数逆序对,但要注意位置 n1n - 1 与位置 nn 是不能交换的,提前特判一下即可。

M. Moving Both Hands

新建一层图为原图的反向图,然后每个节点连一条从原图到新图,长度为 0 的边,然后跑最最短路看到新图每个节点的距离即可。