实现错误记录

  • 比较函数定义不严格,存在返回相等但是实际上有区别的情况。这可能导致双堆维护删除操作时出现问题。(应当同时弹栈但是栈顶元素不相等)
  • for (int i = 1; i <= n; i++) a[n] = inf
  • 在一些回溯时需要撤销操作的 dfs 中,因为其他原因 return 的时候没有撤销操作。
  • 循环/if 里层外层变量名混淆。
  • 进行 dfs / 递归时,因为使用全局变量下层 dfs 时破坏了上层之后要用到的信息。
  • 容斥时,只枚举了集合大小忘记了乘组合数。
  • 插头 dp 不要忘记连接两个左括号或者连接两个右括号的情况。
  • 树链剖分时,询问链的时候一定要注意是比较重链顶端深度大小,不能直接比较两个点深度大小。
  • sort 时忘记加比较函数。
  • 维护矩阵乘法时左乘右乘搞错。
  • 线段树合并时,如果要可持久化,空间要开两倍。
  • 在处理涉及不同长度字符串的字符串哈希时,一定要用 str[i] - 'a' + 1 而不是 str[i] - 'a'
  • 在处理子树最长从根开始路径之类的问题时,如果这个子树不能选,dp 值设为 \(0\) 仍会 +1 向上贡献
  • 在用 new 出来的数组时出现越界。这时不会报错,出现 new 出来的数组时,一定要谨慎计算每次调用的大小。(尤其是写多项式时)
  • 维护线段树区间加时,结果可能很大的时候 modify 函数参数不开 long long