易错点
务虚
-
注意观察题目中的性质,每一条性质都不是没用的,都可能是问题的突破口

-
长的阅读理解题,一定要耐着性子读完,提取主干,也不要忽略细节

-
一定要记得静态查错!!有的时候花费数小时调的错误,很可能几分钟的静态查错就能解决

WA
-
取模优化/int取模
1ll*a+b,no 括号
-
memset 不能乱用,如果你的 sizeof 写错了, 可能会爆出随机数

-
记得把
INF设到足够大
-
记得 时刻取模 ,有减法时记得先
+mod再%mod, 如果有必要需要读入后 立即取模
-
不要 盲目取模 ,尤其是计算 过程中 胡乱取模会 影响正确性 ,算完后最后 结果可以取模

-
注意 模数性质 ,是否为质数,数清楚有多少位,不要想当然

-
在 需要取模的快速幂 中,如果最后的 结果为
0记得加上一个mod,否则会出错
-
在 快速幂 中, 传参数记得类型 为
long long否则可能会 爆long long
-
重载运算符 时要注意,
this.a<t.a才是从小到大

-


-
指数不能直接取模!

-
快读时记得处理负数

-
树剖时记得分清楚第\(i\)个原数权值(
w),和按dfn顺序的权值(nw)
-
线段树
update或pushup或pushdown时,不能仅更新sum,应该更新全部信息,如min、max等
-
在 splay 的标记下传过程中,一定要先判断左右儿子是否存在,再对其翻转标记异或 \(1\)

-
Floyd算法枚举顺序:
k,i,j
-
左移或右移的优先级比 \(+\) 或 \(-\) 的低,
&&比||的优先级高
-
左右移位默认的类型是
int, 记得转换成long long再计算
-
\(1\) 默认类型是
int, 运算时记得转换为1.0或1ll
-
矩阵快速幂时
res矩阵记得初始化, 使对角线为 \(1\)
-
移位的时候记得注意数据范围,不要
-1>>1
-
输出
float double时最好用printf("%f");,而不是long double的printf("%lf");
RE
-
开桶小心访问负下标!!


-
线段树开4倍空间

-
线段树
pushdown时记得特判是否为叶子
-
DFS是树根的父亲尽量不要设成\(-1\),因为
fa[root]可能会在LCA中用到导致RE
-
树状数组记得特判
0的情况
-
分块时,最后块后面还要加一个右端点为
n+1的块
-
n,m的范围不代表数据范围
-
用
ios::sync_with_stdio(false)后不要用scanf
-
多组数据重新建边的时候记得清空 \(idx\)

-
更改了 \(\rm set\) 中元素后,小心迭代器 RE

-
\(\rm set\) 小心边界,判
s.begin()和s.end()
-


TLE
-
不要随便用SPFA,看清题目要求,是否有负边权,是否是双向边,是否稠密或稀疏等

-
存图时记得初始化
memset(h,-1,sizeof(h))
-
没事别用
unordered_map,稳定 \({\rm O}(n)\) 警告
-
矩阵乘法循环顺序:
i,k,j或者k,i,j
-
在 dfs 中的各种奇怪错误可能是由某个你不希望在下次搜索被更改的量, 被改动了, 因此一定要注意自己变量的作用域

-
删除的时候要考虑链表优化,跳过没用的(已经删除的)!

-
\(\rm SPFA\) 判断负环的时候只需要判当前路径长度是否大于 \(n\)

CE
-
命名时避开
x1,y1,x2,y2这些系统关键字
-
切忌用
int a[10000000]={0};初始化大数组,否则会因为编译文件过大暴死
UB
-
int类型的函数无返回值
-
访问负下标

-
编译选项开
-Wall有助于避免UB
-
-fsanitize=address, -fsanitize=signed-integer-overflow这些选项对UB和RE的排查都有帮助
高效做题
-
在遇到和逆元有关的题目时(比如求概率或期望),可以写一份转成
double的副本,可以提高调试效率
-
写了
init就要初始化,别忘了用
-
模数为\(0\)或者除数为\(0\)都可能导致
RE

浙公网安备 33010602011771号