写题时的破防瞬间

经典永流传


记一些做题时卡了很久的奇奇怪怪的点:

调题篇

  1. 认真审题

  2. 取模!!!取模!!!取模!!!

  3. 数组还是比较快的,有事没事别用 \(\text{map}\)\(\text{priority}\)_\(\text{queue}\)(存图还是用链式前向星吧,少用 \(\text{vector}\)

  4. 十年OI一场空,不开\(\text{long long}\)***

  5. 注意数据范围,双向边开两倍,线段树开四倍,线段树合并开 \(\text{log}\)

  6. 能用 \(\text{int}\) 别开 \(\text{long long}\),要不然可能 \(\text{TLE}\)

  7. 变量重名引发的惨案(全局开过了函数里再开一遍引发奇妙错误)(NOIP2021/fn

  8. 循环手残打错后 \(i\)\(j\) 傻傻不分(其实还有 \(n\)\(m\)

  9. 多组数据记得清零,不止数组,还有必要的 \(\text{stl}\)\(\text{cnt}\)\(\text{tot}\)……

  10. 图论的边、数据结构的数组编号从\(0\)还是\(1\)开始

  11. 强制在线更新 \(\text{lastans}\)

  12. 数据结构询问区间不保证 \(l \le r\)

  13. 赋值运算符与等于号不分( \(=\)\(==\) 傻傻不分)

  14. 运算优先级(养成好习惯,多加括号)

  15. 局部变量未赋初值

  16. 如果反复 \(\text{memset}\) 太慢了,那么尝试在循环里顺便清零,或者再做一遍逆操作复原

  17. 每天一个好习惯: \(\text{sort}\) 自定义比较函数 \(\text{cmp}\) 用引用传参 (\(\text{e.g.}\) \(\text{int}\) &a)真的会快很多啊啊啊

  18. 结构体里数组不要开太大,上次高精玄学错了好久

  19. 变量都开 \(\text{long long}\) ,快读快输忘开

  20. 极大/小值直接赋 \(\text{(1<<30)}\)\(\text{(1ll<<60)}\) 有风险,建议 \(\text{memset}\)

  21. \(\text{struct}\) 里套 \(\text{vector}\) 容易被卡常?

  22. 输出格式(是否漏打换行)

  23. 变量突变了,一般是越界,并且怎么有可能乱飘到别的数组里啊啊啊啊啊啊啊(队长忠告,多用 \(\text{stl}\),自动分配空间)

  24. \(\text{dp}\) 中赋了极大/极小值,加减乘除的时候小心炸,或是例如极小值加了一个数导致发生变化。

  25. 当你觉得你写的所有部分都一点问题没有的时候,可能确实如此,因为可能还有你没考虑的情况。

  26. 算时间限制的时候别忘了空间限制。

算法篇

  1. 求欧拉路径 \(/\) 回路的字典序最小方案,\(\text{dfs}\) 时在回溯时倒序存经过的点,输出时正序输出,避免自环最后走不到

  2. 二分上下界

  3. 结论题是否存在特例

  4. 利用倍增 \(\text{LCA}\) 求树上任两点距离,区分节点深度与到根的路径长

  5. 链式前向星的成对变换 \(\text{tot}\) 先赋成 \(1\)

  6. 字典树中初始时 \(\text{tot} = 1\)

  7. 结论题打表找规律显然比人类智慧要轻松

  8. 取对数可以把大数乘法转化为加法

  9. 保证精度慎用除法

  10. 深搜递归边界

  11. \(\text{Hash}\) 有时自然溢出是个不错的选择(一般用180181327不会被卡,别问我是怎么来的)

  12. 重复要用的东西预处理

  13. 搜索内部用以记录每一层状态的数组 / 变量千万别开全局,否则覆盖掉就g了

  14. 数据结构下传懒标记想清楚优先级与下传方式

  15. 线段树大常数可以用树状数组代替

  16. 线段树合并的两种写法

  17. 虚树建边的时候注意方向,或者直接暴力建无向边,还有什么 \(\text{Kruskal}\) 重构树、圆方树,如果建完以后发现 \(\text{dfs}\) 进不去,有可能只建了单向边

  18. \(\text{DP}\) 初始状态的设定(记搜写法是递归边界)

  19. 数位 \(\text{DP}\) 中判断一个状态是否访问过不可简单判dp数组是否为 \(0\) ,否则当前状态答案为 \(0\) 时时间复杂度gg,最好加一个 \(\text{vis}\) 数组

  20. 关于斜率优化:①若直接用 \(\text{double}\) 判斜率,注意除以 \(0\) 时返回极大值;若用乘积形式判斜率,注意乘负数会变号,爆 \(\text{long long}\) 时要开 \(\text{int128}\)。②在凸壳中加新的点时,与 \(\text{q[r]}\)\(\text{q[r-1]}\) 比较都可以。③判断斜率大小最好加等号。

  21. 差分约束建超级源点 \(0\) 与所有点连长为 \(0\) 的边,所以点数变为 \(n+1\) ,判负环的松弛次数至少为 \(n+1\)

  22. 点双注意是否有孤立点连自环

  23. 线段树的懒标记有时不能简单地判是否为 \(0\),有时需要对 \(\text{tag}\) 取模时,\(\text{tag}\) 变为 \(0\) 就下传不了了

posted @ 2023-07-09 08:31  Semorius  阅读(38)  评论(0)    收藏  举报