OI坑点总结

  • 矩阵不一定满足欧拉定理,但满足指数循环节定理(即拓展欧拉定理)
  • 如果DFS中的可持久化只需要回退操作,那么可以直接利用系统栈来维护可回退化来降低时间、编程复杂度
  • 基于长链剖分的子树合并是O(n)的
  • 图论题千万要区分“边id”和“点id”,别敲错变量名
  • “求[1,n]的一个排列P,使其在满足限制函数f的情况下,从小到大依次考虑每个数让其尽量靠前”不是字典序最小,而是反向字典序最大
  • 注意逆向思维(反向图、排除法……)
  • 2-SAT问题一定要搞清楚变量和值分别是什么
  • 2-SAT问题千万不要用dfs,用Tarjan
  • 无论是什么题目,当状态数很危险时,一定要排除无效状态
  • 一定要保证在求解之前预处理就已经完成
  • 计算几何题别忘开double
  • 计数/最优解问题别忘了考虑有没有可能将问题分解成几类完全不相干的简单问题(如P1056 排座椅横向和纵向完全无关,可以分开贪心)
  • 手敲快排时记得先循环j
  • 除非有必要,否则搜索时尽量不要用较复杂的数据结构以免增加常数
  • 搜索别忘记判重
  • 具有单调性的数据更新要尽量避免重复计算
  • 不要忘记IDA*和A*的估价函数应小于等于实际代价
  • O(1)的long long取模乘法不加0.5可能会有精度问题
  • 高精度和多项式的题目千万不要懒,多展开算一算
  • 注意set和multiset的区别
  • 如需从原数据构建新的数据结构,千万别为了省空间而带来麻烦,该套用模板就套用模板
  • 多维哈希时各个维度的P一定不能相同
  • 注意“基于值域的前缀和”,即 值位x的有多少个 <==> 值至少有x的个数-....
  • Hash千万别用自然溢出
  • KMP求解“非完美循环节”时要特别当心
  • 在列举了一堆必要条件后别忘了尝试证明它也是充分条件
  • 用数据结构维护信息时不要局限于“差分”等有“实际意义”的,不要忽略如“初始值+变化量”的套路
  • 扫描线算法在遇到位置相同的直线时一定要先处理失效线
  • 最小生成树必然满足“最大权最小”
  • 别忘了公平组合游戏可以拆分后计算
  • 以一已知点为起点的树上最长链必以直径的一端点结尾
  • 小心计算中溢出
  • 虽然不要依赖于通过数据范围猜算法、骗分,但一定要看全所有参数的数据范围。
posted @ 2019-08-19 21:39  happyZYM  阅读(237)  评论(2编辑  收藏  举报