本文已被迁移至新博客,您可点此查看。
A. Another Rock-Paper-Scissors Problem
归纳一下可以发现这就相当于求
N
N
N 在三进制下的表示。
时间复杂度:
O
(
log
N
)
O(\log N)
O(logN)
B. Ball Painting
用 f i , j f_{i, j} fi,j 表示有 j j j 个球被涂黑且这些球总共占用 i i i 行的方案,枚举最后一个球是否占用了一个新的列可得递推式
f i , j = f i , j − 1 × ( 2 i − j + 1 ) + f i − 1 , j − 1 × 4 f_{i, j} = f_{i, j - 1} \times (2i - j + 1) + f_{i - 1, j - 1} \times 4 fi,j=fi,j−1×(2i−j+1)+fi−1,j−1×4
预处理后直接输出即可。
时间复杂度:
O
(
N
2
)
O(N^2)
O(N2)
C. City Driving
基环树上最短路。实现起来稍微有点麻烦的板子题。
时间复杂度:
O
(
N
)
O(N)
O(N)
D. Drunken Walk
令
f
i
,
p
i
f_i, p_i
fi,pi 分别表示在原图上从
i
i
i 点开始走的期望边数以及从
1
1
1 点开始走经过
i
i
i 点的概率。
对于一条边
e
(
u
,
v
)
e(u, v)
e(u,v),无视掉它后从点
u
u
u 出发走过的期望距离从
f
u
f_u
fu 变成
f
u
′
=
f
u
×
w
u
−
w
e
(
f
v
+
1
)
w
u
−
w
e
f'_u = \frac{f_u \times w_u - w_e(f_v + 1)}{w_u - w_e}
fu′=wu−wefu×wu−we(fv+1)
其中
w
u
w_u
wu 表示
u
u
u 的所有出边的权值和,
w
e
w_e
we 表示边
e
e
e 的权值。
最后注意到
f
u
f_u
fu 对答案贡献的权重为
p
u
p_u
pu,因此无视掉边
e
e
e 后的期望距离为
f
1
+
p
u
(
f
u
′
−
f
u
)
f_1 + p_u(f'_u - f_u)
f1+pu(fu′−fu)
枚举所有边然后取最大值即可。
时间复杂度:
O
(
M
)
O(M)
O(M)
E. Empty Triangles
暴力求出所有交点,暴力建边。
注意到抽象成图后每个点的度数恰好为
4
4
4,因此可以暴力求三元环的个数。
时间复杂度:
O
(
N
2
log
N
)
O(N^2 \log N)
O(N2logN)
F. Fighting for Triangles
用
f
S
f_S
fS 表示当前已经有集合
S
S
S 中所有边的情况下先手与后手得分差的最大值。
状压 DP 预处理后直接查询即可。
时间复杂度:
O
(
N
⋅
2
N
)
O(N \cdot 2^N)
O(N⋅2N)
G. Guessing Game
注意到
a
i
+
b
j
≤
c
⇔
a
i
−
(
−
b
j
)
≤
c
a_i + b_j \leq c \Leftrightarrow a_i - (- b_j) \leq c
ai+bj≤c⇔ai−(−bj)≤c 以及
a
i
+
b
j
≥
c
⇔
(
−
b
j
)
−
a
i
≤
c
a_i + b_j \geq c \Leftrightarrow (-b_j) - a_i \leq c
ai+bj≥c⇔(−bj)−ai≤c,这是差分约束的形式。于是建图之后判断图中是否存在负环即可。
时间复杂度:
O
(
Q
(
N
+
M
)
)
O(Q(N+M))
O(Q(N+M))
H. Hidden Code
显然两个串做差之后的结果要么是密码串的一个前缀,要么是密码串后面加上加密结果的一个前缀。
枚举长度检查即可。
时间复杂度:
O
(
N
l
2
)
O(Nl^2)
O(Nl2)
I. Identity Checker
想不出来有什么正经做法。反正我是枚举若干个特值检查来的。