sb错误合集,于重要考前复习,持续更新。
1.线段树要开四倍空间
2.ans = (ans % mod + mod) % mod
3.注意编号之间的对应关系,分清顺序和编号的区别,尤其在从0开始编号的时候注意细节
4.超过1e9就不讲道理地开long long //重点
5.注意状态转移方程的目标状态
eg:正确状态:for(int j = m + 1; j <= X[i] + m; ++ j)
f[i][m] = min(f[i][j], f[i][m]);
手误状态:for(int j = m + 1; j <= X[i] + m; ++ j)
f[i][j] = min(f[i][j], f[i][m]);
6.注意边界情况是否合法
eg:正确示范:for(j = m; j >= 1; -- j) if(f[i][j] < 0x7f7f7f7f) break;
错误示范:for(j = m; j >= 1; -- j) if(f[i][j] <= 0x7f7f7f7f) break;
7.注意区分点数和边数的区别
eg:N个点的完全图
正确状态:head[N], nxt[N*N]
手滑状态:head[N], nxt[N]
8.注意数组不要定义反
正确定义:F[N][S]
手滑定义:F[S][N]
9.树剖树根的top应设为1
eg:正确示例 : dfs2(1,1)
错误示例: dfs2(1,0)
10.dsu on tree 统计答案应在遍历函数中而非计算函数
11.注意判断一个点是否有重儿子,否则会造成死循环
12.分块时最后一个块的右端点记得赋为n;
13.对一个序列的子串进行处理时,若处理需赋初值则必在循环之前赋值
14.如果对数组进行大量赋值操作TLE时,考虑是否开得过大
15.斜率优化如果乘法注意正负,如果除法注意斜率正无穷!!
16.注意dp初始状态最好从0开始而不是1
17.网络流tot = 1
18.如果循环后面有必要操作而循环开头有continue,那么要注意在continue时同时进行这些操作
19.注意左边界到底是1还是0,尤其是在维护前缀和数组时。
20.线段树的modify操作要在搞子树的时候下传一下标记。