那些年踩过的坑

  1. 线段树4倍空间(22.2.9炸弹)不光是边,当线段树优化建边时head什么的也要4倍,双向边8倍,重构树记得建边4倍空间(多了一半点,还是双向边),其他2倍

  2. 想清是用dfs/bfs/DAG dp(22.2.8,图的遍历)

  3. LIS(n log(n))做法是upper/lower(22.2.8zroi)

  4. 注意相乘时是否需要强转成longlong,否则会炸(22.2.8,tarjan:mining your businese,没过数据,却ac)

  5. 除法取模看看能不能先除再对乘法取

  6. 浮点数判断相等精度,eps1e-8,一定fabs,不光两个浮点相比需要eps,和零比也要和eps比!!!(22.2.20(状压:愤怒的小鸟))

  7. 状压数组大小把控好,不要1<<后再减1(22.2.20,状压:atr)

  8. 位运算括号打全,优先级

  9. dp初始化想清,想全

  10. 线段树query与update:传(lson/rson,l,r)不能传(lson,l,mid)与(rson,mid+1,r);

  11. dijs的vis标记是出队打,不是进队就打(打标记代表他是当时的最短路,不用再更新了)

  12. 分块手动清空桶,不要用memset(浪费时间)

  13. 不要把strlen(s)放到for循环里

  14. 优先队列清空不要while(!empty)pop,每次log(n),正确写法:q=priority_queue<type>();感谢comb

  15. tarjan:只有在缩点时在打标记,不要犯老姚的错误,详情见comb:comb的tarjan
  16. trie树数组长度开成所有字符串总长之和

  17. 多组数据记得清空数组
  18. 矩阵乘法结构体初始化清空,快速幂初始化ans数组(ans=a,k--)=(单位矩阵);
    1 负数取模有很大可能还是负数,a=(a%mod+mod)%mod;
  19. 如果用位运算符,左移或右移的过多的话,要 1ll << x;
  20. 有时初始化数组,-Inf比0保险
  21. 像 x * (x - 1) / 2 , x * (x + 1) * (x * 2 + 1) / 6 这种公式一定要确保x是小于mod的,不然会炸。(2023.1. 3 min_25模板)
  22. 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;
}

posted @ 2022-02-20 17:04  5_Lei  阅读(15)  评论(0)    收藏  举报