7.7 考后总结
时间安排
8:30--8:35
读题,T1大概矩乘一下就行,T2神秘博弈,T3感觉不太可做。
8:35--8:50
T1,线段树维护矩乘。
8:50--9:30
T3,暴力。
9:30--10:00
T2,玩小样例什么策略都没看出来。估摸着应该是个结论题,写个暴力打表。
10:00--11:00
T2,观察打表发现符合要求的图是好多“圈”连一块,可以分讨 dp 求解。
复杂度是 n^2 的。
11:00--12:40
考虑 T2 如何优化到 \(O(n)\) 。
思考 T3 ,看数据规模大概是对数据范围分治,但是不知道怎么统计结点数。
回顾反思
T2:
赛时 \(O(n^2)\) 的瓶颈在于两端的“圈”是否能以 i 为端点存在的判断。
观察以及人类智慧可以发现对于每个 i ,都会将端点限制在一个范围内,只要 i 处于这个范围那么就可行。
于是线性扫一遍就行了。
T3:
强题。
题目要求对所给01串所有可能状态的 sam 结点个数计数。
赛时完全不知道 sam 结点怎么计算。
因为忽略了一个点:串的 sam 结点与其反串的后缀树的结点是对应的,于是将串 reverse 后考虑后缀之间的关系。
由于字符集只有 2, ,所以后缀树是二叉树。所以点只有三类。经过数量关系上的分析发现只用计算叶子节点数和只有一个儿子的节点数。
叶子节点数。一个点为叶子意味着对应的后缀在全串只出现一次,也即不为任意其他后缀的前缀。可以对 n 规模分治容斥。
对于只有一个儿子,考虑在原串末尾加上一个 0/1 ,那么该结点必然在原来儿子的另一侧多出来一个叶子,那么用该叶子的方案减去原本结点为叶子的方案即可。
详细参考题解

浙公网安备 33010602011771号