UOJ Round #16
A. 破坏发射台
8
$n \bmod = 1$ 且 $n \le 11$
$m \le 11$
暴力枚举所有染色方案判断是否合法。
时间复杂度 $\mathcal O(n^m)$。
40
$n \le 11$
利用最小表示法将状态去重。
时间复杂度 $\mathcal O(n!)$。
56
$n \bmod 2 = 1$ 且 $n \le 10^7$
设第一格的颜色为 $A$,然后设个一元二进制状态表示当前格的颜色是否为颜色 $A$。
设 $f[i][0 / 1]$ 表示第 $i$ 格的颜色是否为颜色 $A$ 的合法方案数,递推即可。
时间复杂度 $\mathcal O(n)$。
64
$n \bmod 2 = 1$ 且 $n \le 10^9$
使用矩阵快速幂优化。
时间复杂度 $\mathcal O(\log n)$。
88
$n \bmod 2 = 0$ 且 $n \le 10^7$
设第一格的颜色为 $A$,设第 $\frac{n}{2} + 1$ 格的颜色为 $B$,然后设个二元三进制状态表示第 $i$ 格和第 $\frac{n}{2} + i$ 格的颜色是否为颜色 $A$ 或颜色 $B$($1 \le i \le \frac{n}{2}$)。
设 $f[i][0 \sim 8]$ 表示第 $i$ 格的合法方案数,递推即可。
时间复杂度 $\mathcal O(n)$。
100
$n \bmod 2 = 0$ 且 $n \le 10^9$
使用矩阵快速幂优化。
时间复杂度 $\mathcal O(\log n)$。
B. 破坏蛋糕
25
$n = 3$
保证前 $n$ 条中存在两条直线 $L1$ 与 $L2$,使得其他直线要么与 $L1$ 平行,要么与 $L2$ 平行
有限的区域分别是三角形和平行四边形,求出这个三角形和平行四边形,在每一段上选关键点判定即可。
时间复杂度 $\mathcal O(n)$。
50
$n \le 1000$
在每一段上选关键点判定,使用半平面交。
时间复杂度 $\mathcal O(n^2 \log n)$。
65
$n \le 5000$
把所有直线按照斜率排好序,单次半平面交 $\mathcal O(n)$。
每条直线方向只会改变一次,而且还是改变了 $\pi$,把这条直线拿出来再插回去,单次排序 $\mathcal O(n)$。
时间复杂度 $\mathcal O(n^2)$。
考虑另一种常数更小的判定方法,把所有直线面向判定点一侧法向量的斜率拿出来极角排序,如果有两个相邻的法向量的极角查 $\ge \pi$ 就说明出现了一个开口,这个区域是无限的。
100
$n \le 10^5$
每次只修改了一个法向量,而且只需检测相邻的法向量,可以用平衡树来做,事实上一个 std::set
足矣。
注意转过一圈时的边界情况。
时间复杂度 $\mathcal O(n \log n)$。
C. 破坏导蛋
20
$n \le 10^3$
$m \le 10^3$
暴力枚举。
时间复杂度 $\mathcal O(10^6)$。
40
$\lvert x_i \rvert, \lvert y_i \rvert \le 100$
枚举点的横坐标把二维的限制降至一维,这样询问就变成了询问横坐标等于 $x$ 的点中纵坐标在某一个区间内的点数,对每一个横坐标预处理一下前缀和即可。
时间复杂度 $\mathcal O(\lvert x \rvert \lvert y \rvert + n + m)$。