Notes「兄弟你的笑话好像不怎么好笑」
denominator · · 个人记录
- 变量一定要读入,答案一定要输出。
- 图论题在读入一条边之后一定要调用
add(有些人习惯的可能是addedge)把它加到图里去。 - 定义了一个
dfs函数之后,一定要调用它。
前三个可能会让你绷不住,但是这都是真事。有些人就为此虚空调试了一会。
- 千万不要在
dfs2中调用dfs1。 - 优化一串代码时,照着原来的代码改动,千万不要漏一句话。
- 做 hash 题时,千万不要什么 hash 都直接使用,正确率太低的会炸飞。
- 模数为
10^9+7 时,千万不要定义为998\,244\,353 。 - 这是一份可爱的快读代码。
template <typename _Tp> void read (_Tp& x) { x = 0; char ch = getchar (); while (!isdigit (ch)) { ch = getchar (); } while (isdigit (ch)) { x = (x << 3) + (x << 1) + (ch ^ 48); ch = getchar (); } }- 第 2 行千万不要漏掉
&。 - 第 9 行千万不要写成
x = (x << 3) | (x << 1) | (ch ^ 48);。 - 如果输入有负数,千万不要直接使用她。
- 第 2 行千万不要漏掉
- 如果你的代码小数据全过,大数据全挂,千万不要忘了检查数组大小。
- 读入
n 对a_i,b_i 千万不要写成先读入n 个a_i ,再读入n 个b_i 。 -
- 这是一份可爱的 LCA 代码(部分)。
if (dep[x] < dep[y]) { swap (x, y); } for (int p = __lg (n); p >= 0; p--) { if (dep[fat[p][x]] >= dep[y]) { x = fat[p][x]; } } int l = x; if (x != y) { for (int p = __lg (n); p >= 0; p--) { if (fat[p][x] != fat[p][y]) { x = fat[p][x], y = fat[p][y]; } } l = fat[0][x]; }- 第 5 行不等号方向千万不要反。
- 第 12 行的条件判断千万不要写成
dep[fat[p][x]] != dep[fat[p][y]]。 - 第 4 行和第 11 行的两个
p >= 0千万不要写成p >= 1。 - 一定要保证根的
dep不为0 才能使用她。
- 线段树空间千万不要写成
N << 1。 - 设线段树当前节点区间为
[L,R] ,修改 / 询问区间为l,r ,则判断终止条件为l <= L && R <= r,千万不要写成L <= l && r <= R。