我是 sb
2020-08-30
Hash 的 BASE
和 MOD
不能太接近, 不然 Hash 冲突会让人当场自闭 ...
BASE
和 MOD
的位数至少要差 (5) 位
2020-09-01
- sb 就要认真读题
- 求一个数 (a) 的逆元时如果 (a,p) 不互质就不能用
exgcd
/费马小定理 求逆元
2020-09-08
高精度判大小由高位到低位判断
2020-09-15
用 ( ext{rand}) 一定要写头文件 cstdlib
2020-09-18
sb 就要认真分析完复杂度再写码
2020-09-20
三年 OI 一场空, 不写 memset 见祖宗.
2020-09-23
struct
内要记得写构造函数初始化
2020-09-25
( ext{Dijkstra}) 中被插入堆中的点数是 (Theta(n + m)) 级别的
2020-10-14
要开 long long
要开 long long
要开 long long
要开 long long
要开 long long
要开 long long
要开 long long
INF
要足够大 INF
要足够大 INF
要足够大 INF
要足够大 INF
要足够大 INF
要足够大 INF
要足够大
2020-10-18
多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零多测要清零
2021-03-20
这一天 Aestas16 终于想起了这篇文章
for (int i = 1; i <= n; i++) frac[i] = frac[i] * i;
->
for (int i = 1; i <= n; i++) frac[i] = frac[i - 1] * i;
2021-03-21
BSGS 中 (i) 的范围应为 ([0,t]) 而非 ([1,t])
另外记一个虽然不是自己的错误但是比较重要的 今天用这个 hack 了一堆人
BSGS 中如果 (a=p) 且 (a,p) 都是 (b) 的因子时有解, 解为 (1)
exgcd 中如果 (a=p) 且 (a,p) 都是 (b) 的因子时有解, 解为 (0)
2021-03-25
Splay 删除结点代码:
if (cnt[u] > 0) return cnt[u]--, splay(u);
->
if (cnt[u] > 1) return cnt[u]--, splay(u);
傻逼 Aestas16 对着代码瞪了 20 分钟愣是没发现问题在哪里
2021-03-27
傻逼 Aestas16 又把 Splay 写挂了 ...
- ( ext{pushdown/pushup}) 时都要判一下左右儿子是否存在再进行更新
- ( ext{rotate}) 时要先 ( ext{pushdown})
- 维护序列问题初始化不要用插入!不要用插入!不要用插入!
- 维护序列问题初始化建树时不要忘记每个节点的 ( ext{cnt}) 是要赋值的, 而不是像 ( ext{size}) 一样可以通过 ( ext{pushup}) 维护
傻逼 Aestas16 又双叒叕把 Splay 写挂了 ...
Splay 的 ( ext{split}) 代码:
fa[ch[x][0]] = ch[x][0] = 0;
这样是 UB , 应该分开写:
fa[ch[x][0]] = 0, ch[x][0] = 0;
2021-04-05
SPFA 插入队列的元素数目是 (m) 级别的
2021-05-24
我来指正上面的错误了(
SPFA 插入队列的元素数目是 (n^2) 级别的,但是同一时刻在队列里的元素最多只有 (n) 个,因此如果手写队列的话要写长度为 (n) 的循环队列