图论
多个dfs一定要用对 dfs1 dfs2
dfs中一定要确定更新信息时是从进入时从父亲更新儿子还是进去后从儿子找父亲更新,如果混用会出玄学问题。
一定要分清 dfs序和 dfn。
tarjan 记得分清哪个是 dfn 哪个是 low。
能不写 SPFA 就不写,防止被卡。
差分约束记得分清 < 还是 <=。
数据结构
线段树一定要 build
平衡树一定要分清哪里传引用哪里传形参。
求 mid 时一定要确定会不会溢出,用 ((l+r)>>1) 还是 (l+((r-l)>>1))。
大数据结构记得先检查能不能用更简单的数据结构替代,非不得已不动用重型武器。
善用 pb_ds。
线段树记得判 L>R。
通用
可能在更新时被修改的变量,一定提前存好 tmp。
一定要分清运算优先级
多测一定要清空
记得查 UB
不确定是不是对的思路,在改之前一定先备份。
注意全开 long long 可能 MLE 的题一定确保哪 long long 哪 int。
一定要把时间多放在想正确做法,而不是浪费一堆时间严格证伪假做法,大概看起来错就直接弃。
随机说话,不要预设题目算法。
不要临场改代码习惯,尽量向自己习惯的代码风格靠拢。
左右移记得写 1ll,取 max min 的时候也是。
初始化一定确定 memset 会不会T,否则只清空需要用的。
打 dfs 或循环时感觉不对直接关运行窗口,防止给电脑卡爆,记得写出口。
记得开 Wall 和 Wextra。
能打草记下来或在注释中记录的思路一定及时记下来,不要写着写着写忘了。
尽量寻找复杂度更优的思路,就像能 $log$ 做的不根号做。
检查各种 RE,比如数组越界或除 0。
注意值域与 $N$ 的区别。
极大值不要用 LLONG_MAX 或 INT_MAX,可能溢出。
浮点数
注意精度和空间,开 double 还是 long double,加减乘除时一定先乘 1.0 或强转 double。
记得最后答案如果应该是 int 记得先转,防止输出 $1.0e+6$ 之类的东西。
背熟可能导致 难 的情况
字符串
hash 一定要多整几个模数,还要确保模数在模前会不会就溢出。
DP/计数
组合数学题预处理逆元一定要预处理到 0,还要确保 n 会不会大于 m。
dp 题注意初始化,注意转移方程的边界会不会越界。
能打草记下来或在注释中记录的思路一定及时记下来,不要写着写着写忘了。
滚动数组空间够能不用就不用,就算用也要记得哪里怎么写。
注意取模,有减一定先给减数取模,减完后的结果一定再取模,最后再 $(xxx+mod) \mod mod$
贪心
贪心有时间一定要证明,不会证一定要数据点分治
贪心如果对拍好写就算证了也要多拍几组。
二分
二分一定要证明单调性
求 mid 时一定要确定会不会溢出,用 ((l+r)>>1) 还是 (l+((r-l)>>1))。
考场/状态
想上厕所及时去上,最好提前上。
考场上不要一直吃东西。
考前不要吃过于折磨肚子的食物。
考前不要吃太多食物。
不要在饥饿的情况下考试。
考试时一定不要睡着。
考前不要熬夜。
提前牢牢记住考场位置。
试机时不要把东西带进考场。
部分分
做好时间规划,可能暴力严格优于正解。
随机化题可以卡时间,不 T 就一直跑。
