警钟长鸣

就是一些小技巧。也可以说是警钟。

  1. sort 函数排序不具有稳定性。
  2. 不开 long long 见祖宗。
  3. 特殊情况下,开了 #define int long long 见祖宗。
  4. memset 见祖宗。
  5. 大量输入建议使用快读。
  6. 线段树维护区间最小值区间覆盖 lazy 的初始值要赋成 INF。
  7. \(C_n^m\) 在满足 \(n\ \&\ m=m\) 的位运算关系时,值为奇数,否则为偶数。
  8. 一个代码中,有多个队列或者多个栈时,不要把他们搞混了。
  9. vector 就算不往里面存数也会占很多空间。
  10. 用 long long 做二进制时,要写成 1ll << x。
  11. 当线段树同时维护区间加和区间乘时,下放标记时应先下放乘法标记再下放加法标记。
  12. 写 FHQ 时注意若该节点没有左右儿子,谨慎进行 pushdown 和 pushup。目的是不要给 0 节点加上奇奇怪怪的东西。
  13. 使用快读是应注意题目输入中是否存在负数。
  14. 写离散化的时候 lower_bound 时记得使用 unique 后的序列长度。
  15. multiset 常数过大可尝试使用可删堆代替。
  16. #define 慎用,(x) 一定要带括号。比如 #define S(x) (x * x) 可能错误,应写为 #define S(x) ((x) * (x))。
  17. 把区间加离线下来做差分,这种情况记得开二倍空间。
  18. 据 UKE_Automation 获悉,一个排列,交换,这些关键词出现考虑逆序对。
  19. 莫队可以采用奇偶性优化:
struct nodeq {
	int l, r, id;
	bool operator < (const nodeq & cmp) const {
		return bel[l] != bel[cmp.l] ? bel[l] < bel[cmp.l] : (bel[l] & 1 ? r < cmp.r : r > cmp.r);
	} 
} q[N];
  1. 对于某些构造题(不限操作次数,如 CF2143E),可以以此为切入点:观察操作中不变的量。这一条来自这篇题解。
  2. 正数和负数之间判断奇偶性不能使用 %2 而应使用 &1。
  3. 我他妈再 all in 某个假做法我就是傻逼。
  4. 线段树 l,r 传参可减小常数。
  5. 不要预设题目难度。不要一味追求正解。不要预设答题情况和答题策略。
  6. 维护中位数状物,可以考虑将大于中位数的赋为 \(+1\),小于的赋为 \(-1\),求和。
  7. dinic 建双向边,计算边数要乘 2。
  8. 求最值问题可考虑利用二分转化为可行性问题进性求解。
  9. 当且仅当所有元素只需要考虑与某个常量的大小关系时,考虑用 01 染色。
  10. 树上 dfs 时,不同层的 dfs 之间不要使用全局的栈/队列/数组,避免冲突。
  11. 分类讨论时,进一步分讨时不要落下大的条件。
  12. 一对多考虑能否转化为多对一。
  13. 正难则反。
  14. 最大贡献可以考虑用总贡献减去最小的非贡献(求小贡献同)。
  15. 网格图考虑黑白染色。
  16. 对数组进行 swap 的时间复杂度是 \(O(n)\)。
  17. ACAM 多模式串匹配的时间复杂度是节点个数。
  18. 三角形三边中点、三条高的垂足、三点和垂心连线的中点,九个点共圆,且九点圆圆心为外心和垂心连线的中点。
  19. 序列分治时,若分治点不在中间,可考虑使用类似启发式合并的做法,每个区间内只遍历较短的一部分。
  20. 多测时字符数组要清空,如:若不清空求后缀数组会出错。
  21. 当一个思路做不通的时候,不妨考虑从另一个角度入手问题,不要死脑筋。
  22. 求最大值时 mx 的初始值应赋为 \(-\infty\)。
  23. 排列问题考虑置换环、二分图、平面直角坐标系、逆序对。
  24. 解决问题时考虑从局部扩展到全局。如贪心排序时,考虑二元之间的先后,进而扩展到全局。(邻项交换法)
  25. 复杂的 dp 考虑从高维高复杂度的 dp 做起,逐步优化。
  26. dp 优化考虑值域和定义域交换的思路。
  27. 多次使用栈和队列注意将 head 和 tail 清空。
  28. 堆的个数为 \(\frac{n!}{\prod siz_i}\)。
  29. 卡常时,可考虑使用 long long 或 __int128 暂存数据,计算后统一取模。
  30. 考虑合理利用树剖性质:任意点跳轻边到根节点,至多 \(O(\log n)\) 次。
  31. 如果可以,务必手玩小样例。样例错误,务必重读题面。
  32. 可用 acos(-1) 求圆周率。
  33. 若题目为至多选 \(k\) 个,可额外加入 \(k\) 个数,转化为恰好选 \(k\) 个数。
  34. 若数据范围很小,考虑状压、搜索。
posted @ 2024-11-10 17:01  Zctf1088  阅读(164)  评论(0)    收藏  举报