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 的向后转移:

\[dp_i \to dp_{i + k \times a_i} \]

时间复杂度 \(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_i = \sum_{j = 1}^{V} DP_{j, i \mod j} \]

\(DP\) 有懒转移:

\[dp_i \to DP_{a_i, i \mod a_i} \]

时间复杂度 \(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 的延申。

posted @ 2024-10-13 23:31  end_switch  阅读(7)  评论(0编辑  收藏  举报