Loading

日常唐氏Bug合集

开坑有亿点点晚、

首先开 -Wall,可以一定程度上避免许多问题

  • 数组空间一定要开够,只要在限制内就随便开,宁可开大,最好宏定义避免改漏

  • 数据范围不确定就全局 \(long long\)

  • 想清楚状压/哈希\(0\) 是否产生“不存在”与存在第一项的冲突,想清楚边界的意义,考虑是否需要取到 \(-1\)

  • 最大值/最小值不要太小或太大,小心爆 \(int\) / \(long long\)

  • 注意检查相似字符(如 \(l\)\(1\)\(u\)\(v\)\(p\)\(q\) 等),或者码代码时相应慢一点

  • 运算符优先级:
    小括号 () \(>\) 逻辑非 ! \(>\) 乘、除、取模 \(>\) 加减 \(>\) 位移 >><< \(>\) 按位与 & \(>\) 按位异或 ^ \(>\) 按位或 | \(>\) 逻辑与 && \(>\) 逻辑或 || \(>\) 三目运算符 \(>\) 赋值 =
    建议疯狂加括号

  • 函数的参数列表调用顺序与数组的寻址顺序永远是个谜,尽量不要调用 \(read()\) 或嵌套自增/自减

  • 另外用大括号对应赋值的时候搞清楚对应的位置

  • 文件操作一定要检查

  • 考虑线段树 \(pushup\) 时左右区间是否有先后/依赖关系

  • 网络流 \(bfs\) 跑完再返回,否则每次清空队列复杂度可能更劣

  • 哈希想清楚往哪边对齐

  • 图上遍历死循环时检查先建边与遍历的 \(for\) 循环,其次考虑 \(vis\)

  • 转移时记清楚哪一维维护什么信息,写之前统一写法

  • 考虑清楚建图的存边与各种生成树的存边能不能通过 \(tag\) 实现数组共用,不要怕浪费空间

  • 容斥考虑是否需要一直归纳还是只有有限层

  • #\(define\) 里加括号!!会直接替换内容,不保险就用 \(typedef\)\(using-as\)

  • 树剖的链操作合并时不只是有 \(dep\)\(id\) 固定的写法,根据实际情况考虑

  • 大部分平时做题死活调不出的情况终结于面向数据编程,考虑手模数据

  • \(\dots\)

然后就是会思路不会实现或者懒得想的问题了

附完整运算符优先级:

  1. 括号运算符:圆括号(),方括号[],花括号{}

  2. 成员访问运算符:点.和箭头->

  3. 单目运算符:*(解引用),&(取地址),++--+-~!sizeof

  4. 类型转换运算符:static_castdynamic_castconst_castreinterpret_cast

  5. 乘法/除法:*/%

  6. 加法/减法:+-

  7. 位移运算符:<<>>

  8. 关系运算符:<><=>=

  9. 相等运算符:==!=

  10. 位运算符:&^|

  11. 逻辑运算符:&&||

  12. 三目运算符:? :

  13. 赋值运算符:=+=-=*=/=%=>>=<<=&=^=|=

  14. 逗号运算符:,

posted @ 2024-09-16 16:53  HRcohc  阅读(8)  评论(0编辑  收藏  举报