默笙の挂分小技巧
挂分小技巧:
关于空间
- 无向图没开双倍空间
- 环形 \(dp\) 没开双倍空间
- 维护序列插入没开大空间
- \(manacher\) 没开双倍空间
- 线段树合并开四倍空间
应是logn倍空间 - \(kruskal\) 重构树没开双倍点空间
- 扫描线算面积并开四倍空间
关于数学题
- 快速幂底数没取模爆
long long
- 对快速幂指数取模
- 取模没消负号
- \(10^8\) 用埃氏筛
应用欧拉筛 - \(\div 0\) 或 \(\times 0^{-1}\)
- 用
abs
取小数绝对值
关于 \(dp\)
- 计数 \(dp\) 没开
long long
- \(dp\) 省去一维后没有反向
- 区间 \(dp\) 的断点 \(k\) 取到了 \(r\),导致 \(k+1>r\)
- 滚动数组不清空
- 单调队列优化
l++
和r--
前没判l<=r
- 断环成链遍历 \(1\sim 2\times n\)
要-1 - 有负数的 \(dp\)
memset(dp,0,sizeof(dp));
- \(dp\) 转移没判掉 \(inf\) 导致统计答案时
!=INF
的条件失效 - 以为 \(bitset\) 的
<<
和>>
复杂度是 \(O(1)\) - \(10^9\) 的数值赋
0x3f3f3f3f
的 \(inf\)
关于图论
- 用 \(dijkstra\) 求最长路
- 差分约束边建反
- 树剖建的线段树从
root
开始build
- 双向边删边不删反向边
- 对最大流反悔边流量赋 \(-w\)
- 对费用流反悔边费用赋 \(0\)
- \(floyd\) 按 \(ijk\) 循环
应是kij - \(dijkstra\) 在第一次入队时标记 \(vis\)
- 树上差分不特判
fa[lca]!=lca
- 双向边改边权不改反向边
关于数据结构
- 栈没放标兵
- 对空 \(vector\) 取下标 \(size-1\)
- \(1\sim n\) 遍历 \(vector\)
- 扫描线算面积并直接将原区间作为线段树对应区间
- 把默认堆(大顶堆)当成小顶堆
关于字符串串
getchar
读回车- 拓展 \(kmp\) 没清空 \(z\) 数组
- 哈希值加法 \(\% 131\)
关于其它算法
- \(check\) 函数内一种情况不行直接
return 0
- \(DLX\) 的
recover
和remove
同向遍历 - 坐标为 \(0\) 的二维前缀和没 \(+1\) 处理
- 对只有一个数的数组差分
- 随机化没
srand
关于未定义报错
- 数组轻微越界导致未定义的 \(WA\)
- 数组严重越界导致未定义的 \(TLE\)
- 没开
long long
导致未定义的 \(RE\)
关于打比赛
- 式子不拆
- 打比赛默认正序开题
- 打比赛死磕正解不打暴力
关于其它
- 多测不清空
- 宏定义不加括号
- 位运算不加括号
- 重载 \(>\)
- 开数组 \(a[M][N](M<N)\)
应是a[N][M] - 不备份会被修改的数组下标