- 线段树4倍空间(22.2.9炸弹)不光是边,当线段树优化建边时head什么的也要4倍,双向边8倍,重构树记得建边4倍空间(多了一半点,还是双向边),其他2倍
- 想清是用dfs/bfs/DAG dp(22.2.8,图的遍历)
- LIS(n log(n))做法是upper/lower(22.2.8zroi)
- 注意相乘时是否需要强转成longlong,否则会炸(22.2.8,tarjan:mining your businese,没过数据,却ac)
- 除法取模看看能不能先除再对乘法取
- 浮点数判断相等精度,eps1e-8,一定fabs,不光两个浮点相比需要eps,和零比也要和eps比!!!(22.2.20(状压:愤怒的小鸟))
- 状压数组大小把控好,不要1<<后再减1(22.2.20,状压:atr)
- 位运算括号打全,优先级
- dp初始化想清,想全
- 线段树query与update:传(lson/rson,l,r)不能传(lson,l,mid)与(rson,mid+1,r);
- dijs的vis标记是出队打,不是进队就打(打标记代表他是当时的最短路,不用再更新了)
- 分块手动清空桶,不要用memset(浪费时间)
- 不要把strlen(s)放到for循环里
- 优先队列清空不要while(!empty)pop,每次log(n),正确写法:q=priority_queue<type>();感谢comb
- tarjan:只有在缩点时在打标记,不要犯老姚的错误,详情见comb:comb的tarjan
- trie树数组长度开成所有字符串总长之和
- 多组数据记得清空数组
- 矩阵乘法结构体初始化清空,快速幂初始化ans数组(ans=a,k--)=(单位矩阵);
1 负数取模有很大可能还是负数,a=(a%mod+mod)%mod;
- 如果用位运算符,左移或右移的过多的话,要 1ll << x;
- 有时初始化数组,-Inf比0保险
- 像 x * (x - 1) / 2 , x * (x + 1) * (x * 2 + 1) / 6 这种公式一定要确保x是小于mod的,不然会炸。(2023.1. 3 min_25模板)
- 01Trie(谢特-后缀自动机):
点击查看代码
正确的:
int Query(int now,int x)
{
int res = 0;
for(int i = 16 ; i >= 0 ; i--)
{
int k = (x >> i) & 1;
if(t[now][!k])res += 1<<i,now = t[now][!k];
else if(t[now][k])now = t[now][k];
}
return res;
}
错误的:
int Query(int now,int x)
{
int res = 0;
for(int i = 16 ; i >= 0 ; i--)
{
int k = (x >> i) & 1;
if(t[now][k^1])res += 1<<i,now = t[now][k^1];
else now = t[now][k];
}
return res;
}