Loading

调试遇到的坑

  1. 多测清空,全部全部清空, 不要直接 memset 整个数组, 结尾清空更合适。(\(\times 1\))

  2. \(\text{array, pair}\) 等 STL 本身有重载运算符,不能重载,应该写 \(\mathrm{cmp}\).

  3. 检查数组越界,数组大小

  4. 线段树的修改,查询操作都要 \(\mathrm{pushdown}\)

  5. 注意双指针等 \(\mathrm{while}\) 循环的时候要检查越界(下标 -1 要特判)

  6. 树状数组不能维护 0-index 的信息

  7. \(\mathrm{fhq-treap}\)\(\mathrm{merge}\) 操作要注意 x 中所有的权值要小于 y 中所有权值,一个是 \(\mathrm{merge(tr[x].rs, y)}\), 一个是 \(\mathrm{merge(x, tr[y].ls)}\)

  8. 函数如果返回值不是 void 一定要 return!!!不然会被 O2 杀死!!!

  9. 基环树如果连双向边是可以有重边的 \(\mathrm{(a \rightarrow b, b \rightarrow a)}\) 找到环上的边删一条就可以了,即使用链式前向星或者找到这条边换到最后再 \(\mathrm{popback}\) (找到立即 \(\mathrm{break)}\), 否则会被二元环卡掉.

  10. 二分题要注意:如果我们二分 \(x\), 并且 \(\mathrm{check}\) 的是 \(\mathrm{calc(x)}\) 是否小于一个数, 然后计算一些和 \(x\) 有关的东西的时候要注意:也就是说临界位置有时候只要算一部分。 以一道典题为例,将一堆序列放在一起从小到大排序求前 \(k\) 小的数的和, 我们二分出第 \(k\) 小的数后, 要把小于这个数的都加上,并且等于这个数的只加一部分(这部分个数肯定 \(\le n\))。题目:https://bs.daimayuan.top/p/34

  11. 树套树里如果内层树是动态开点,则要把 节点个数节点信息 记在外面,否则会被覆盖。

  12. \(\mathrm{trie}\) 树的时候最好让根节点是 \(1\) 而不是 \(0\), 不然如果访问到叶子节点的 \(\mathrm{nxt}\) 可以会调用根节点的一些值

  13. 特判一定一定一定要写在最前面,否则可能会在执行特判之前进行一些奇奇怪怪的输出甚至直接结束. (\(\times 1\)) 教训:
    https://atcoder.jp/contests/abc397/submissions/65722734 WA
    https://atcoder.jp/contests/abc397/submissions/65722789 AC

  14. 如果循环要让 \(i = l \to r\), \(l, r\) 是 int 范围, 那要把 i 开成 long long / unsigned , 否则 i 会在最后一次变成 INT_MIN

  15. map, set 如果用的是自定义结构体类型一定要注意把重载运算符写完整!!!假如有 a, b, c, d 四个元素, 如果只写一个 return a < A.a; 会导致 map/set 认为 a 相同的元素就是相同的。

  16. exgcd 中的 a, b 最好都弄成正的防止搞出负数 gcd 导致把 x, y 变成非负的时出现问题。(\(\times 1\))

  17. dijkstra, priority_queue<pair<dis, pos>, vector<pair<dis,pos>>, greater<pair<dis,pos>>> dis, pos 顺序千万不能反. (\(\times 1\))

  18. 树上背包合并的时候,不能先 \(sz_u \leftarrow sz_u + sz_v\) 再合并前面的子树和 \(v\) 的子树,不然一条链会被卡死。

18. 算空间!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! MLE 包死的。

  1. 遇到多测的判断题,不要在输入到一半就直接输出或者退出,否则可能会把这轮的输入带到下一轮。

  2. 在 Linux 环境下,long long inf = 1e15 会 CE, (ll) 1e15 就不会。

  3. 如果你要计算 \(a\) 并且同时要用 \(a\) 得到 \(b\),这时一定要注意在计算 \(b\) 的某一步时所需要的 \(a\) 是否都有了,最好的方法是分开写。

  4. 线段树区间加维护区间 \(\gcd\) 不要边加边取模!!!(3h)

  5. 杨辉三角预处理组合数一定要从 \(0\) 开始枚举,不然 \(\dbinom{0}{0}\) 会没有初值变成 \(0\),比如 CSPS2025T4 就会挂(1h)。

posted @ 2025-02-17 22:20  循环一号  阅读(17)  评论(0)    收藏  举报