A. AtCoder Reverse Contest
构造初始为 \(25\) 个 C 后 \(25\) 个 A 的序列,通过恰好进行 \(X\) 次把最左的 CA 换成 AC(每次使一个 A 在某个 C 之前,从而令可做的 "ARC"→"CRA" 次数增加 \(1\)),最后在相邻字符间插入 R
B. Halving Subtraction
直觉是贪心。从后往前遍历时,下一个元素必须是当前元素的 2 倍以上。假设初始时有 \(1\) 个 \(A_n\),从后往前观察,按能凑出当前关注值所需的最小数量去增加元素个数。
C. Sum of Average 2
若两端以外存在比端点值大 \(2\) 或以上的数值,将其与端点交换不会变差 \(\rightarrow\) 两端的值只需要限定为“最大值”或“最大值 \(-1\)”即可。分别尝试每种情况。
D. Nim_k ?
将问题转化为“允许输入中存在 \(0\)”来考虑。若第一步无法操作则必败。
否则,若存在小于 \(K\) 的值则先手必胜。如果所有值都大于等于 \(K\),可视为“无法将值变为小于 \(K\)”的问题,这与全体元素减去 \(K\) 后的原问题等价。结论是:当全体元素减去 \(\lfloor (\min A) / K \rfloor K\) 后,若第一步能够进行操作则必胜。
E. Taka and Hashi
对 \(3\) 种标签分别用并查集维护连通块,并使用 \(\text{BFS}\) 进行搜索。当在某个顶点处发生分裂时,包含该顶点的标签 \(2\) 和标签 \(3\) 连通块的交集即为可合并的位置。根据连通块大小是否大于等于 \(\sqrt{N}\) 进行分类讨论,从而可以在 \(O(\sqrt{N})\) 时间复杂度内列举出交集。
F. Angst for All Pairs 2
先把成本排序,把若干最便宜的元素重复使用(枚举重复数量 \(k\))以低代价覆盖最多的元素对,其余元素尽量只用一次,若仍不足则再用最便宜的元素补足;在所有 \(k\) 中取使总费用最小的方案即为最优。
浙公网安备 33010602011771号