受zhangtingxi的启发,写了这个错题本,来记录自己的易错点。
一:比赛相关
- 检查文件名,文件流。(2021CSP-S)
- 尽量使用万能头。(2020CSP-S)
- 最后一定要把所有样例过一遍,包括小样例(2022CSP-S)
- 暴力一定要复制一份,之后可能需要。
- 不要花太多时间在一道题上!
二:数组空间
- 线段树开4倍空间
- 注意如果是动态开点线段树是开 \(logn\) 倍空间,可持久化数据结构log倍原来空间
- 双向边开两倍,注意图论题目 \(n,m\) 上限是否一样。
- 网络流千万要开够,不要数错。如果够直接开20倍。(ABC263)
- 离散化,破环成链要开够
三:卡时间常数
- 主席树最好只跑一次(NOI Online2022)
2 如果可以通过离散化优化勉强卡到上界的复杂度那就离散化。(USACO2007NOV) - hash表手写,尽量使用挂链法。(20221027模拟赛)
- 数组的枚举顺序要和开的顺序尽量一样。如
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[j][i]++;
这样常数会巨大!(20221015模拟赛)
5. 线段树如果常数比较大要尝试用离散化避免动态开点和区间操作,如果还不够上树状数组硬弄或者用别的方法代替。(20221018模拟赛)
四:卡空间常数
- 注意vector有两倍常数
- 如果用 map 或者 set 卡到了上界,要注意这两个东西空间常数巨大,尝试优化(20221010模拟赛)
- dp时滚动数组
- 前缀和时不能用辅助数组就在原数组上弄(20220819模拟赛)
- bool数组用bitset!
- 快速的排序中只有堆排不用额外空间
- 基排有时候也能缩空间
- 分块常数大尝试莫队
五:贪心正确性
- 尽量拍
- 能证的花店时间证,证不出来的暴力打上(20221115模拟赛)
- 如果有别的做法的就用别的做法。
- 如果贪心是错的,尝试反悔
六:二分
- 二分前尽量判断边界情况(20220312模拟赛)
- 注意 (l+r)/2 时l+r是否爆int/long long(20221018模拟赛)
七:随机化
- Xoring hashing 一定要把随机范围放到 long long 中(牛客2022第4场)
- 什么时候都不要忘了随机化。(牛客2022第5场)
- 使用 mt19937,rand()的值域在不同系统中不一样,很烦。(20221022模拟赛)
- 随机化可以拍一下看正确率,如果拍都错了还是放暴力吧。
- 对于题目限制住了随机的,很有可能特意去卡
八:动态规划
- 对于dp状态数特别多的,考虑去除用不到的状态(20221027模拟赛)或者把一些答案一定相同的缩起来(20221019模拟赛)把一些状态改成枚举的内容
- 对于转移,那些套路弄上去
- 如果设计的状态不好压,尝试在别的地方(例如值域,另一个dp数组)进行dp
- 一些暴力的dp起码把方程,定义写出来,有时候会有惊喜。
九:数据结构
- 有关连续区间的都可以尝试往线段树上去套,因为有可能会出来线段树分治
- 线段树平衡树的tag一定要求合并(ABC265G)
- 调试还是要自己把树建出来一个个值看。
十:图论
- 树上多次询问考虑树剖,倍增,点分治、点分树,离线+启发式合并
- 图上多次询问考虑图剖,离线+(各种东西),最小生成树上处理
- 千万别被前两条限制住
- 最优化问题千万试一下网络流,因为网络流太玄学了
- 距离问题点分治/点分树