前言
还有2天就NOIP了,之前做了这么多场模拟赛,是时候拿出来总结一下,
算是给自己一针强心剂。
列表
从最近的考试总结起(个人认为的重点,可能有重复,仅供参考):
(转化很重要,一定要简化问题过后再找性质!)
- DAG转拓扑序列,变成序列问题;
- 无向图转生成树+非树边求解;
- 题面敏感,按 [ 2 t , 2 t + 1 ) [2^t,2^{t+1}) [2t,2t+1) 倍增分组;
- 区间最值问题,常用:单调队列/栈,最终手段:笛卡尔树;
- 限制复杂,指数暴力不可过,考虑网络流;
- 状态转移转化为点/边,原问题转化图论;
- 矩阵行列特殊限制,一般转二分图;
- 异或题常用手段:拆位;
- 选数依赖,买卖问题,反悔贪心;
- 无向图路径/连通块有点权、边权最值限制,最佳选择:重构树;
- 无向图暴力三元环计数,个数是 m m m\sqrt{m} mm 级别;
- 二分答案转判定性问题(这个太关键了!可我总是记不起来!);
- 贡献为 x 2 x^2 x2 形式,可以转化为 2 ( x 2 ) + x 2{x\choose2}+x 2(2x)+x,求任意两点之间的贡献;
- 矩阵行列式:对于排列中的一个环,逆序对的奇偶性与环长相反,所以系数为 ( − 1 ) 环 长 − 1 (-1)^{环长-1} (−1)环长−1(可用在毒瘤的邻接矩阵行列式中);
- NIM-K问题结论:每次最多拿 m m m 堆石子,当前状态必败,当且仅当每堆石子数转换成二进制后,每位1的个数 m o d ( m + 1 ) = 0 \bmod (m+1)=0 mod(m+1)=0;
- 数学题中出现整除符号,一般可以整除分块;
- 二项式转组合数问题;
- 各种单调性(栽在这里至少2次了),一定要尽可能全部用上;
- (CSP-ST4)平面图最小割问题,转化为最短路问题求解;
- 贡献为 x 2 x^2 x2 形式的另一个技巧: ( x 2 − ( x − 1 ) 2 ) (x^2-(x-1)^2) (x2−(x−1)2) 差分,算最小贡献不影响(两次看到费用流的题用这个技巧);
- 算组合数时很容易忽略的点:参数大于等于模数,需要用卢卡斯定理;模数不为质数,需要对模数分解质因数计算(或者递推);
- 序列计数有一些相邻元素的限制时,考虑连续段DP;
- 所有点同时移动求最短时间一类,用二分答案会简单很多;
- …
妙到家的改变定义法:
- n n n 个点连续出现 ⇔ \Leftrightarrow ⇔ 相邻点对数为 n − 1 n-1 n−1;
- 若干区间取并后两区间的间隙 ⇔ \Leftrightarrow ⇔ 被0个区间覆盖的位置 ⇒ \Rightarrow ⇒ 区间覆盖数最小的位置;
- 平面中的黑点恰好形成矩形 ⇔ \Leftrightarrow ⇔ 含奇数个黑点的2×2矩形数量恰好达到最小4个;
- 对于有单调性的序列计数题,转换为差分定义计数;
- …
代码坑点:
-
v
e
c
t
o
r
\rm vector
vector 数组遍历一定不要用
for(auto x:Array)
,这样遍历是以“只读模式”遍历的,会把数组里面每个元素复制一遍,所以即使你的操作只会访问每个元素的一小部分,却相当于访问完了,这会让你以为正确的复杂度超时。用for(auto &x:Array)
或手动遍历就不会出现这种问题。 - 除非模拟和复杂函数需要,尽量不用 v e c t o r \rm vector vector,因为即使是调用一次 s i z e ( ) size() size() 函数也慢得离谱;
- 很多题目中只需要用到优先队列,就不要总是用 m a p \rm map map 和 s e t \rm set set!这是 5 ∼ 10 5\sim 10 5∼10 倍常数的区别!
y1,y0,yn,j1,j0,jn
这些变量不能用!用了就CE
!实在想用的,可以加宏定义,比如#define y0 y23333
;- …
策略:
- 先把所有题通看一遍,大概想一下思路;
- 除非第一题特别难,还是先做第一题;
- 后三道挑一道最简单的做;
- 如果30分钟想不出剩下任何一道题的正解,挑骗分性价比最高的拿部分分;
- 至少留40分钟检查。
(2021.11.19.20:00前持续更新)
后记(2022.11.23)
过一年了发现居然还有人在收藏这篇,我认为有必要提醒一下:
本人去年NOIP考得像坨💩,连省一都没有,建议别把上面的套路当回事
后来发现还是要认真研究问题模型和知识点,只总结表面套路就想达到神奇效果一劳永逸是错误的!