防错笔记

防错笔记

交题前一定检查自己复杂度对不对

检查 freopen 和 文件名

注意函数的返回值检查为double或longlong,特别是板子!

思考一下自己是否判断了所有情况。

int变量一定不要开成bool!!!!!重点检查vis数组是否用int了。

整数二分要写(l+r)>>1,负数向下取整。

实数二分注意/2.0

想不出来的时候去想dp。

可持久化01trie

1.每次新加入节点时更新rt。

2.记得初始化rt[0],边界插入0。

3.数组要开 (O(nlog n))

4.在int范围内不能把树开成32位深度

后缀自动机SAM

1.数组开2倍

2.跳father时记得p=fa[p]。

后缀数组

  1. 注意求 (rnk) 时,比较的是 (tp[sa[i]],tp[sa[i-1]])(tp[sa[i]+w],tp[sa[i-1]+w]),注意是 (+)
  2. (height) 的时候 (j=sa[rnk[i]-1])(-1)(rnk) 外面,表示上一个排名。
  3. 基数排序的字符集大小是递增的,桶的大小到 (O(N))

主席树

  1. 数组空间开32倍。

  2. 不要 if(!x) return 0;,这不是线段树合并。

二分图

1.最大独立集输出方案:S能到达的且T不能到达的。

  1. 棋盘很大保存直线时,按照两条对角线方向保存。

    ((x,y)) 变为 ((x+y,y))((x-y,y))

最短路

1.dij时记得更新vis数组。

2.每次取出点更新时记得 pop

3.记得初始化 dis[s]=0

博弈论

1.优先考虑sg函数,不要自己yy。

概率期望

1.分清楚 最大值的期望期望的最大值

2.dp转移时注意概率之间是乘积关系还是和的关系。

即条件概率还是并行的方案。整体限制。

[P(A|B)=P(A)*P(B) ]

CF494C:条件是整个区间 (le i+max_u) 那么必须满足每个子区间都 (max_v+jle max_u+i)

  1. 方差等于平方的期望减期望的平方

树上倍增

  1. 记得先处理倍增信息(mx,dis),再跳father(x=fa[x,i])。
  2. 倍增在边上,则最后只有到父亲的边没有处理。
  3. 倍增在点上,则最后自己和父亲都没有处理。

约数相关

1.推式子时注意考虑所有条件限制。

2.关注整除的条件,根据“每个数都是整数确定范围”。

3.在不取模做乘除法时,一定先除再乘,防止爆longlong。

异或

1.利用区间异或前缀和达到区间整体异或一个数,查询区间异或时,要分奇偶考虑,二维同理

因为异或两次等于0,只有和当前点奇偶性相同的点在前缀异或时才能够真正的异或上 (x)

树形dp

1.子树内的信息在 (lca) 处合并,在合并完两棵子树后把它们看作一棵新的大子树继续与后面合并。

计数

  1. 处理逆元时一定要处理 (inv_0)
  2. 优先推式子,可以考虑组合意义。

图的连通性

  1. 缩点时一定分清是 (i) 还是 (scc[i])

最小割树

  1. 记得初始化点集q。

  1. 默认是大根堆,但使用小于号比大小。

  2. 堆在重载小于号时,把满足条件的返回为 false,因为是大根堆,小于号是反着用的。

生成函数

  1. 注意第 $$

树上差分

1.记得区分点差分还是边差分。

原文地址:https://www.cnblogs.com/Alansp/p/13960039.html