ABC 335 VP 总结
前言
ABCDE + 口胡 F + 口胡 G 假做法,三分之一伪 AK(?
正文
A
?
B
?
C
?
D
构造一个环形递增矩阵即可。
E
考虑何时才有一个非降序列。
令 \(val_x\) 为点 \(x\) 的权值。
对于一个相邻的点对 \((u, v)\),可以分成三种情况:
- \(val_u > val_v\)
此时只有 \(v \to u\) 的可能,\(v\) 向 \(u\) 连边。
- \(val_u < val_v\)
类似上一种情况,\(u\) 向 \(v\) 连边。
- \(val_u = val_v\)
此时无论是经过 \(u\) 还是经过 \(v\) 或是 \(u, v\) 两点都经过,它们的贡献都一样,将 \(u, v\) 缩成一个点即可。
不会吧不会吧不会有人这种缩点用 tarjan 吧???
对不起,我紫菜。
你怎么知道我 tarjan 缩点然后调 30 min 弘文了?
并查集维护缩点操作。缩点后跑 DAG 上最长路即可。toposort 可以胜任。
注意是在缩点之后重新编号连边。
时间复杂度 \(O(n\alpha (n) + m)\)。
F
首先设 \(dp_i\) 为到第 \(i\) 格的填色方案。
你会想到一个 naive 的向后转移:
时间复杂度 \(O(n \frac{n}{V})\)。
有另一个 naive 的转移,是去考虑 \(dp_i\) 从前面的何处转移而来的。
显然 \(dp_j \to dp_i\) 的条件是 \(j + k \times a_j = i\),转换得:\(i \equiv j (\mod a_j)\)。
维护 \(DP_{i, j}\) 表示模 \(i\) 位置为 \(j\) 的方案总和,那么有:
对 \(DP\) 有懒转移:
时间复杂度 \(O(nV)\)。
此时两个转移的复杂度跟 \(V\) 相关并且两种状态完全一致,不妨考虑对转移过程根号分治。
钦定阈值 \(V = \sqrt {\max_{i \in [1,n]} \left \{ a_i \right \}}\),若 \(a_i > V\) 则用第一种方式转移,反之用第二种方式转移。
时间复杂度 \(O(n \sqrt {\max_{i \in [1,n]} \left \{ a_i \right \}})\)。
G
想到了一个正确概率很大的东西但是会被构造数据卡掉的方法,丢人,不说了。
总结
打得算好的,因为 ABCD 没什么分讨不容易写挂算是有点运气成分,E 想 + 调了接近 65 min,F 口胡出来了但是某些细节还是没注意,G 是数学确实不会做,确实是纯菜了。
后面还是得注重训练码力和刻意记住某些经典的 trick,因为某些题目的关键点就可能是某个 trick 的延申。