半期总结
知识性总结
-
群论。群论主要讲的就是 Burnside 引理和 Polya 定理,都是计数技巧。主要解决一类本质不同问题,核心思想是找到题目中的置换群,对于每种置换统计不动点数量。在统计不动点数量时常常会与各种组合计数技巧搭配。
-
字符串。这学期主要讲了后缀数组、自动机和回文自动机。回文自动机主要处理和回文相关问题,也有些题目在回文树上进行 dp。后缀数组相较于后缀自动机而言就是在处理后缀排序上比较简便。
后缀自动机作用确实挺大,用极少的状态却储存了整个字符串的信息。通过反串建后缀自动机可以建出后缀树,很多题目都需要在后缀树上求答案,用其两个后缀的 lcp 即为其 lca 的 len 的性质。所以经常结合一些数据结构如 lct 等树上常见问题。
-
线性代数。线性代数部分主要讲的线性基与矩阵树。线性基主要处理集合异或相关问题,并且可以延伸到树上。因其 \(O(\log^2 n)\) 合并常常结合 st 表处理一些区间问题。
矩阵树主要考察图论建模,当然也能进行很多扩展操作。本质是求所有生成树边权乘积的和,当然也可以拓展为许多重定义生成树权值的问题,主要是靠重定义乘法。
-
多项式。首先是拉格朗日插值。拉格朗日插值核心思想是 crt,通常在题目中作为辅助出现。如果通过打表或者其它方式发现题目的答案是一个多项式,则可以先求出小规模的答案再拉插出需要的值。
多项式部分就是 fft、ntt 和 fwt。一般是优化一些计数,当然也需要推式子和组合计数的能力,特别是一些需要容斥的题目。本质上是找到一种线性变换。
-
数据结构。数据结构部分讲了点分治、splay、虚树和 lct。点分治主要解决关于树上路径相关问题,核心思想就是找重心为分治重心,统计经过该点路径的答案,然后再再对子树分治处理;如果是动态的,一般要考虑建出点分树,再用数据结构进行维护。
splay 基本上能维护线段树的常见信息,主要是通过 splay 操作维持树的平衡,而 splay 又包含左旋和右旋操作,通过这些操作将树的高度变低,以支持查询;lct 则是类似树链剖分,通过实边和虚边将多棵 splay 连接在一起,以维护动态图。核心是 access 操作,将该点到根的上面挂的 splay 合并到一起,从而支持删加边操作。要特别注意区分原树和辅助树(splay)。
虚树的话,就是只提取出树中的关键点以达到减少规模的效果,常见于多组询问给出关键点或树的规模很大但关键点少的题目中。多组询问直接建树即可;关键点少一般树会有特殊形态,利用其性质建树。
- 建树。本质上是用单调栈维护一条右链。首先按 dfn 进行排序,并将 \(1\) 号点入栈。然后对于点 \(a_i\),先求出它与栈顶 \(s\) 的 lca \(l\),如果 \(l\) 等于 \(s\),则直接入栈就行了(说明 \(a_i\) 与 \(s\) 在一条链中);否则则弹到第一个 dfn 大于 \(l\) 的元素 \(t\) 和下一个元素 \(p\),如果 \(p\ne l\),那么 \(l\) 应该代替 \(p\) 的位置。然后将 \(a_i\) 替代 \(t\) 成为新的右链。弹栈则表示已经确定,所以直接连边即可。
- 建树。本质上是用单调栈维护一条右链。首先按 dfn 进行排序,并将 \(1\) 号点入栈。然后对于点 \(a_i\),先求出它与栈顶 \(s\) 的 lca \(l\),如果 \(l\) 等于 \(s\),则直接入栈就行了(说明 \(a_i\) 与 \(s\) 在一条链中);否则则弹到第一个 dfn 大于 \(l\) 的元素 \(t\) 和下一个元素 \(p\),如果 \(p\ne l\),那么 \(l\) 应该代替 \(p\) 的位置。然后将 \(a_i\) 替代 \(t\) 成为新的右链。弹栈则表示已经确定,所以直接连边即可。
-
杂项。包括 wqs 二分、SW 和最小斯坦纳树。wqs 二分主要解决限制个数且代价函数具有凸性的题目,通过减去二分的额外代价转换成简单的无个数限制的问题,根据切点与题目限制作比较进行求解。一般是打表验证,可以考虑从四边形不等式模型或费用流模型等方向证明。

SW 和最小斯坦纳树考察较少,SW 思想是递归,另一个是状压。
考试总结
总述
T1 花了大概 \(40\) 分钟,主要是在数列长度上卡了一会儿。然后在 T2 上花了很多时间,主要是思路想偏了。T3 虽然记忆中做过,但是没有去细想,打了 T3 和 T4 的暴力后又回去看 T2 了。
优点的话就是暴力分都打了。
问题及解决方案
-
T2 思路想偏并耗时过久。当时觉得 \(u\) 只可能是某个阶乘,就考虑怎么枚举过后快速求。并且在求两个阶乘间的距离时没有仔细思考导致浪费了许多时间。当时想过直接建虚树,但是没有往这个方向深入思考。
- 首先在得出一个结论后不要立马去实现,先考虑到底正不正确,是否存在反例,并且要思考存不存在更简便的写法,避免浪费时间。
- 其次在写代码前要先将细节思考全面后再按框架写,不要来回调补,效率低下。
- 最后不要在一个题上面浪费大量时间,一定要先看看后面的题是否有更容易想的。并且心态很重要,在决定跳题时就不要被前面的题所影响,否则到头来什么都做不好。
-
T3 思考不周。即使 T3 不是原题也应该很快得出结论,更何况是原题应该有一点模糊的想法,当时可能心思主要还是放在 T2 上导致没有仔细思考。在开题的时候也应该先想一会别急着写。
开题的时候一定要先通读完并有一定的思考后才开始做题,不然容易因突发状况导致后面的题缺失足够的思考。
总结及展望
总结
通过又是半学期的学习,套路也是不断地在积累。平时时不时地一定要去复盘总结,不然是很容易遗忘的。
平时学的知识基本上都认真去进行消化了,但是有些没有复习还是有些遗忘。除了作业表的题外,也可以找一点其他题做,熟悉一下算法思想和相关技巧。
在编写代码的时候一定要好好想清想透再写,一定要梳理好框架,已经有几次吃了这种亏了。
赛后的题一定要及时补,将题目的营养汲取干净。
CF 还是太忙了没打几场,虽然上了点分但还是没有达到预期。其实即使没有打也可以下来后看一看想一想,主要去提升一下思维和积累一些技巧,提升还是很大的。
在平时的练习中,能明显感觉得到之前一些薄弱的环节在逐步提高,但是还是要不断练习、积累技巧(计数、数据结构)。
展望
马上又是中考,下次回机房又要等到下次了。所以还是对未来做点展望。
- 在下一个周期中,CSP-S \(360+\),NOIP \(320+\)。
- CF \(2200+\)。

浙公网安备 33010602011771号