csp2024 复习计划
写在最后一次模拟赛后
其实感觉暴露出来我最近的一些问题。
面对难题,我最近几天的态度一直是:放空大脑,等待那个点子 burst into my mind,即更多地在凭直觉、而没有主动地与那些可能的方向做匹配。比如,要是知道往“对背包做值域优化”的这个角度去推,肯定要不了多久就能做出来昨天的 T2。本质上还是因为最近沉不下心做深度思考。
不知道一天以内有没有可能将这个状态调整过来……
不过明天的目标就是切 T1,T2(难度上等价的,注意前两题真的不一定是最简单的题),可能都轮不到冲 T3,T4 的正解。
压力还是不用太大,毕竟 csp 也可以当作 noip 的一个模拟赛。
考场策略?
注意:题目可能不按照难度排序,我们要注意甄别。
如果半个小时了,某道题还完全没有头绪,看看这道题部分分好不好写,如果好写就先写部分分,否则先写后面的换换脑子。然后再根据直觉判断是回过头来做,还是直接扔掉。
如果某道题一直调不出来,虚空调试超过 20min,快速打一个对拍。
对自己的码力要有概念。有时候你就算知道正解是什么,也不要去打。比如,之前有一次没有选择去实现常数更大而更好写的做法。(我对 unordered_map 的常数很不自信,emmmm)
观察大样例的强度,决定是否打对拍。就算对拍很难写,也需要手造极限数据测试空间、时间问题,以及边界情况检测特判。
随机数据下复杂度正确算法、随机数据下答案大概率正确算法都是好东西。
-std=c++14 -O2 -Wl,-stack=1000000000
考前注意事项 list
-
注意下标越界(或许可以使用 assert 辅助检查)
-
(简单贪心题)注意答案可能有正有负
-
未定义行为(e.g. 带符号整数算术溢出、越界访问、无限循环、
++j
以及j++
在同一运算语句中出现、访问未初始化变量……) -
多测要清空(只要是多测,就挨个检查所有全局变量)
-
没有计算空间大小(用两个
bool
变量地址差计算) -
仔细读题(如是否忘记判无解、是否按照要求输出、是否漏掉某些特判),有时可以写个暴力来验证读题的正确性。
-
改动一个地方,而没有在后面对其对应逻辑进行修改。
from 同机房巨佬
内存访问:尽量连续。
分析方法:
-
模拟样例
-
打表
-
抽象问题,做形式化数学推导
-
正难则反
啊啊啊啊啊啊啊啊啊啊啊啊啊啊
先复习板子,再复习 Trick 和题目。
1. 数据结构
-
平衡树 √
-
笛卡尔树:P5854 【模板】笛卡尔树、P6453 [COCI2008-2009#4] PERIODNI、CF1748E √
-
线段树、树状数组的各种 Trick
-
哈希的方法、题目:CF1746F、ABC250E、P8819 [CSP-S 2022] 星战 √
2. 杂算法
-
CDQ 分治、整体二分、点分治、点分树
-
KMP √
-
可以做道大搜索练练手
-
模拟退火(还是不看了,害怕影响考场分析正解思路。)
3. 图论
-
最小生成树、最短路建模相关的一些 Trick
-
次小生成树 √
P4180 [BJWC2010] 严格次小生成树:(其实不管是不是严格次小,都应当用这个思路来做)建出最小生成树,再在上面做树链信息维护,而这可以用树上倍增做。
-
欧拉路(不打算复习了,反正这个知识点可以出得很难。。。)
-
强连通分量、割点、割边 √
-
树的直径相关的贪心结论
4. DP
(不用问了,问就全部都是按照 Trick 和题目来复习。)
-
背包:这几天遇见过不止一次了,就是以背包问题为蓝本,对值域进行优化的题目。以后再遇到类似的,我们应该清晰地认识到这是哪一种背包模型,然后试着用贪心或数学分析等方法优化值域,而非尝试用另外一种算法来解决。
-
区间 DP
-
树形 DP
-
数位 DP
-
状压 DP(把宝藏给补上 qwq)
5. 数学
可以以洛谷题单里面的题作为复习蓝本。
-
错排 √
其实很简单。两个角度:递推、容斥。
-
递推:考虑先在第 \(n\) 个位置放入 \(n\),然后与前 \(n-1\) 个数中的某些交换。于是有
\[D_n = (n-1)(D_{n-1} + D_{n-2}) \] -
容斥:考虑钦定几个位置不合法,则有
\[D_n = \sum_{k=0}^n (-1)^k \dfrac{n!}{k!} \]
-
-
Catalan(好巧,昨天刚好考了。。。)√
\[\dbinom{2n}{n} - \dbinom{2n}{n-1} \]可以推广到一类有折线限制的格路计数问题。
单折线还比较简单。双折线则较为复杂,总体来说思路是容斥,可以见 P3266 [JLOI2015] 骗我呢 中的代码注释。
-
高斯消元 √
-
矩阵乘法相关题目 & Trick