这场整体质量感觉可以算 2020 年度(目前为止)最垃圾。
A
按数值从小到大扫描,维护一个优先队列,每遇到一个数加入队列,每次数值发生 (+1) 时弹掉队列中价值最大元素,然后把此时队列中所有元素的价值和类加进答案。
时间复杂度 (O(nlog n)).
代码: 78541690
B
这题看起来最难以处理的就是编号问题,所以就从编号问题入手,可以发现当场上还剩下 (2^i) 个人时,将所有人按编号从小到大划分为 (2^{i-1}) 个大小相等的组,则每组中恰有一人在 Upper Bracket,恰有一人在 Lower Bracket. 每场比赛会合并相邻的两个组。
于是就可以 DP 了:设 (f[i][u][x][y] (x,yin {0,1})) 表示第 (i) 层 (u) 这一组,Upper 和 Lower 的人分别是否被关注即可。
时间复杂度 (O(2^n)).
代码: 79378015
C
把所有子串拎出来排序,二分答案。每次就是要求将 (s) 划分为 (m) 个连续子串,且每个子串字典序都不小于 ([L,R]) 的方案数。(串一模一样的时候没有必要再区分大小)
直接 DP 是 (O(n^3)) 的,但是注意到一个点能转移到的是一段区间,于是就可以 (O(1)) 转移。
时间复杂度 (O(n^2log n)).
代码: 79516172
D
无奇环等价于任何一个点都不能同时出现在奇数和偶数的位置上。设 (1) 号点的位置是 (0),可以爆搜偶数位置上的值,然后就是要对 ((i,j)) 求 (min_k(dis_{i,k}+dis_{k,j})),其中 (k) 有不超过 (frac{m}{2}) 个位置是被 ban 的。于是对每个 ((i,j)) 预处理一下前 (4) 大就可以完成。
时间复杂度 (O(n^{frac{m}{2}-1}m^2)),常数很小。
代码: 78551177
题解还给了一种随机做法:大概每次把所有的点以某种随机方式染成二分图,随机 (512cdot 20) 次,最优解在至少一次的随机中出现在二分图两侧的概率约为 (1-2 imes 10^{-9}).
E
不难发现 (|f^2(A)|le sqrt{2|A|}).
考虑如何判断一个终止状态是否合法,只需要求出初始状态最少有多少个元素即可,那么肯定是每次贪心地展开,设 (f^k(A)) 从大到小排序后为 (b_1,...,b_l),则 (f^{k-1}(A)) 中有 (b_i) 个 (i). 把按这种方式贪心展开的函数叫做 (g(A)). 很容易推知 (|g(A)|=sum^l_{i=1} a_i,|g^2(A)|=sum^l_{i=1}ia_i).
那么对于 (K=1) 或 (K=2) 的情况,可以直接 DP 解决,使用 DP 划分数的经典方法,有一个序列初始为 ({1}),每次给最后面添加一个 (1) 或者给所有数都 (+1). 时间复杂度 (O(n^2)).
对于 (Kge 3) 的情况,必定有 (|f^k(A)|le sqrt{2n}le 63). 于是可以爆搜划分数,然后贪心展开。一个很有用的剪枝是,如果任何时候展开的大小超过 (n) 就没有必要继续搜下去了,加上这个之后运行时间从 (1918 ext{ms}) 变成了 (78 ext{ms})。
时间复杂度 (O(n^2+P(sqrt {2n}) ext{poly}(n))),其中 ( ext{poly}(n)) 部分很小。
代码: 79614806
F
nim 积意义下的离散对数。下面默认求 nim 的复杂度是 (O(log^2 W)).
考虑整个域的大小是 (W=2^{64}-1),首先显然有一个 (O(sqrt Wlog^2 W)) 的 BSGS 做法。
显然 (W) 不是质数,分解一下发现 (W=3 imes 5 imes 17 imes 257 imes 641 imes 65537 imes 6700417),每一个质因子都不大,可以考虑计算答案在模每个质因子意义下的值,最后 CRT 合并。
设当前处理的质因子是 (P). (a^{igodot kP+r}=b Leftrightarrow a^{igodot kW+frac{W}{P}cdot r}=b^{igodot frac{W}{P}} Leftrightarrow (a^{igodot frac{W}{P}})^{igodot r}=b^{igodot frac{W}{P}}),所以就是要解 ((a^{igodot frac{W}{P}})^{igodot r}=b^{igodot frac{W}{P}}). 直接 BSGS 即可。
时间复杂度 (O(sum sqrt{P_i}log^2 W)).
代码: 79635282