易错点/易炸区
-
!a \(\Leftrightarrow\) a==0 , a \(\Leftrightarrow\) a!=0
-
memset
只能对数组的一维赋值 -
sort
函数默认升序排列,即 \(x<y\) -
把
INF
设到足够大,但也别大到0x7fffffff
-
记得时刻取模,有减法时记得先
+mod
再%mod
,如果有必要需要读入后立即取模 -
不要盲目取模,尤其是计算过程中胡乱取模会影响正确性,算完后最后结果可以取模
-
注意模数性质,是否为质数,数清楚有多少位,不要想当然
-
在需要取模的快速幂中,如果最后的结果为 \(0\) 记得加上一个
mod
,否则会出错 -
重载运算符时要注意,
this.a<t.a
才是从小到大 -
指数不能直接取模
-
树剖时记得分清楚第 \(i\) 个原数权值(
w
),和按dfn顺序的权值(nw
) -
线段树
update
或pushup
或pushdown
时,不能仅更新 \(sum\),应该更新全部信息,如min、max
等 -
在 splay 的标记下传过程中,一定要先判断左右儿子是否存在,再对其翻转标记
xor 1
-
Floyd算法枚举顺序:
k,i,j
-
线段树开 \(4\) 倍空间
-
线段树
pushdown
时记得特判是否为叶子 -
DFS 是树根的父亲尽量不要设成 \(−1\),因为 \(fa_{root}\) 可能会在 LCA 中用到导致 RE
-
树状数组记得特判 \(0\) 的情况
-
分块时,最后块后面还要加一个右端点为 \(n+1\) 的块
-
\(n,m\) 的范围不代表数据范围
-
不要随便用 SPFA,看清题目要求,是否有负边权,是否是双向边,是否稠密或稀疏等
-
存图时记得初始化
memset(h,-1,sizeof(h))
-
尽量不用
unordered_map
,易被卡ywy_c_asm的故事 -
矩阵乘法循环顺序:
i,k,j
或者k,i,j
-
命名时避开 \(y2\) 等系统关键字
-
考试的时候看清编译语言是 c++ 还是 c++11
-
\(int\) 类型的函数要有返回值
-
不要访问负下标
-
编译选项开
-Wall
有助于避免 UB -
在遇到和逆元有关的题目时(比如求概率或期望),可以写一份转成 double 的副本,可以提高调试效率
-
写了
init
就要初始化,别忘了用 -
模数为 \(0\) 或者除数为 \(0\) 都可能导致 RE
-
考试开始时先看完所有题,先做可做的,做题策略要正确