UOJ Round #4
A. 元旦三侠的游戏
10
$n = 2$
必有 $a = 2, b = 1$。
不可以,总司令!
70
$n \le 1000$
这是一个博弈问题,记 $f_{a, b}$ 表示状态是否必胜。
使用记忆化搜索进行转移,$b$ 上界为 $\log n$,状态数为 $\mathcal O(n \log n)$。
100
$n \le 10^9$
保证 $a \ge 2, b \ge 1, a^b \le n$,于是有 $a \le \sqrt[b]{n}, b \le \log_a n$。
显然 $a, b$ 的范围是相互制约的,那么实际状态数只有 $\sum_{b = 1}^{\log n} \sqrt[b]{n}$。
如果一个状态 $(a, b)$ 满足 $a \gt \sqrt[b + 1]{n}$,那么此时 $b$ 是不能再增加了,那么只需考虑 $\lfloor \sqrt[b]{n} \rfloor - a$ 的奇偶性即可得到答案。
注意当 $b = 1$ 时 $\sqrt[b]{n} = n$,而 $b = 2$ 时 $\sqrt[b]{n} = \sqrt n$,因此我们对 $b = 1$ 的情况作特殊判断。
时间复杂度 $\mathcal O(\sqrt n \log n)$。
B. 元旦激光炮
THUSC 2023 试机题。
10
$n_a, n_b, n_c \le 30$
查出 $a, b, c$ 的所有元素并排序。
60
第 $k$ 大显然二分答案。
由于可能存在重复数字,因此需要找到一个尽可能大的数,使得各序列中小于它的元素个数和小于 $k$。
最坏情况下总调用次数为 $\lceil \log_2 w \rceil \times \lceil \log_2 n \rceil \times 3 = 30 \times 17 \times 3 = 1530$。
64
特判 Test #1。
或者加一个小优化,内部二分的区间随外部二分的区间转移。
C. 追击圣诞老人
10
$n \le 5, k \le 10$
暴搜出所有长度 $\le k$ 的可能路径。
时间复杂度 $\mathcal O(n^k)$。
20
$n \le 100, k \le 100$
记 $w(a)$ 表示 $a$ 序列的权值。
将序列抽象成点,每一个序列向它最后添加一个点形成的序列连边,那么这张图满足堆性质:如果 $u$ 连向 $v$,则 $w(u) \lt w(v)$。
使用堆维护已拓展的序列,一开始将所有入度为 $0$,即长度为 $1$ 的序列加入堆中,重复 $k$ 次操作:每次取出一个权值最小的序列并输出其权值,将其连向的序列加入堆中。
每个点度数为 $n$,时间复杂度 $\mathcal O(nk \log nk)$。
40
$n \le 1000, k \le 10^5$
使用孩子兄弟表示法,将每个点度数减至 $2$。
为了保证权值递增,需要将每个序列扩展后的序列按权值排序。
事实上每个序列可扩展的状态只与最后一个元素有关,对每个点预处理即可。
时间复杂度 $\mathcal O(n^2 + k \log k)$。