notes-and-tricks

-INF HN-00338

-1. https://www.cnblogs.com/C202044zxy/p/15126199.html

0.注意不要把题想得复杂

0.5 NO #define int long long Use #define ll long long

  1. -fsanitize
  2. 树上构造 链/菊花/完全二叉
  3. 通读所有题,想清楚细节再code
  4. #define EVAL(x) cout << #x " = " << x << "\n"拜谢ClHg2
  5. #define CALC(x,y) cout<<#x"e"#y"="<<x##e##y<<endl eg. $CALC(2,2)=>2e2=>200$
  6. 对于可变状态,一般比特殊更容易计算时,考虑特殊状态何时转移到一般状态
  7. Prufer序列在树上计数/构造中十分重要。先考虑之。
  8. 完全背包要先弄完所有$2^i$再lowbit建立其他物品。
  9. 计数考虑容斥原理和拆式子(总数减去不满足数)。
  10. 最近点对问题有一个通用思路,就是找“支配点对”,也就是说,有许多的点对是没有用的。求 LCA 满足性质的方式就是 dsu on tree 形式的支配点对,与距离相关的则是更常用点分治。
  11. 轻重链剖分在静态树上统计时优先考虑。
  12. 有修改可先考虑无修情况。
  13. 细节尽量少。推式子时间$<<$debug时间。
  14. dp状态过大时,有两种思路:i)增加状态数量 ii)对状态增添限制。
  15. 无向图BCC缩点后是一棵树,树边是割边。
  16. 在想转移之前,为了防止做无用功,最好先想想该如何统计答案。
  17. 无向图的 DFS 树有一个极好的性质,就是图中的非树边只能是返祖边。
  18. 模意义下分数期望最优化直接无脑dp
  19. 计数题大量重复贡献考虑桶
  20. 序列题放在链上 考虑u>v。
  21. 平等对抗游戏 SG or 寻找次优解 (IOI 鳄鱼)
  22. 哪个数字小对着哪个淦
  23. 前缀和优化DP
  24. 推式子降次:log某数(通常为式子中的幂次)
  25. 枚举一个集合 $P$ 的子集 $Q$ :for (int Q = P; Q; Q = (Q - 1) & P);时间复杂度 $\mathcal{O}(3^{|P|})$
  26. 状压debug:void print(int x){for(int i=0;i<n;i++)cout<<!!(x&1<<i);}
  27. 性质,特点,信息
  28. 树转化为菊花->菊花套链。
  29. 组合意义计数题考虑插板法与打表验证。线性的玩意不一定是dp。万一是组合数呢?
  30. 固定长度静态区间和的奇怪题考虑算出前缀和后差分约束。真的很妙。扩展:尝试将一些东西数据结构建模,每一种东西建模为某一种操作。
  31. 同贡献的多源最短路可以将所有源点的dis设为0。eg9432
  32. 基环树森林考虑并查集
  33. 对于多维前缀和,$s_{i_1}-s_{i_2}=s_{j_1}-s_{j_2}$转化为$s_{i_1}-s_{j_1}=s_{i_2}-s_{j_2}$。反之亦然
  34. 状压可折半搜索(补集)
  35. 随机赋值,最后一个赋值前缀xor和。可用于判断某种点是否全部包含或者正好包含所有种类的点。(3587)
  36. 点双考虑建立圆方树。圆方树的一个常用技巧:路径统计时,点赋上合适的权值。
  37. 考虑题目中隐含的拓扑关系与单调性。
  38. 树形背包:当前点1维,子树状态1维,自身状态(选)1维。这玩意是先处理儿子再做父亲。
  39. 区间异或和与常数比大小:算出异或前缀和然后自高位向低位建立01trie
  40. 想到了点分治/树分块但是不会?试试树上DP!
  41. 倍增很好用。
  42. 单调栈用来求函数 $f(i)->$ 数列中第 $i$ 个元素之后第一个大于 $a_i$ 的元素的下标
  43. 次优化问题可以参考最优化问题,记录次优解。
  44. 矩阵乘法没有交换律但是有结合律。可以利用这个性质来做一些类似括号序列匹配的东西。
  45. 当直接做似乎不可做时考虑二分答案/倒着做。
  46. 明确的终点比明确的起点要容易,而且它们之间有着显然的转化。
  47. 重申,静态区间操作转化为前缀操作。
  48. 40-60分做法一般提示正解。
  49. 模拟费用流:贪心。手动模拟费用流的增广,以它推出dp或者贪心式。在省选及以下的常见模型只有二分图最大匹配。五种情况:直接流,退流a,退流b,同时退流,other(因题而异)。建立堆是常用做法。eg,数轴上有洞和老鼠,每个老鼠分配一个洞,求每个老鼠走到属于自己的洞的距离和最小值。这是什么?反悔贪心!
  50. dp状态表示必须选a个,其余状态总量已经决定的,考虑模拟费用流。
  51. 树上选k条从根出发的链使得选边总权值最大/小,连边$(u,v,1,-w) (u, v, inf, w), ans = 2 * sumw - \text{mincost} $而且性质,费用流不退流->k次dp。(dp模拟费用流)
  52. 见到二分图不是KM板子就是网络流。不是踢我。
  53. 发现你的贪心假了之后不妨顺着这个思路想dp做法。
  54. 离线区间高难度查询考虑莫队或按某端点排序。具体地,对于递增的r,所有l的值即为区间历史和。(联考20231102)
  55. 对于区间上的带有支配点的所有子区间和问题,可以离线然后作出线段树维护支配的信息,然后维护全局/区间历史和来做。同上&NOIP2020比赛
  56. 对于把现在的要求移向未来相当于把未来的要素移动回来。
  57. (模拟)费用流先跑一定跑满的边,可以避免负环(老鼠进洞慎用)
  58. 每次操作都会被吃一些东西?时间倒流转化为每次操作给一些东西。
  59. 子树问题不要非常sb的想对于某点的所有子树,直接考虑以它为根的子树。
  60. “必经之地”->割点->圆方树
  61. 对于可以分段计算的式子尽量不要整体开算
  62. dp式子优化山穷水尽?组合意义优化dp:AGC013E AGC001E
  63. 写完后马上手造数据/对拍T1。
  64. 对于二维操作(区间LR(eg扫描线),双贡献),考虑对二维操作。
  65. 不能直接暴力的组合数?使用组合意义。一般是卡特兰/插板法模型。
  66. DP可以从状态的两端思考,可能会有更好的转移。
  67. 期望dp按目前状况的所有情况列出式子然后化简得出dp递推式。
  68. priority_queue清空的时候直接使用构造函数赋值。少一个log。
  69. 对于可排序的东西(代价不由下标决定)而且代价由分组minmax决定的东西,可以考虑先排序在分组,然后就看作括号匹配。CF626F。
  70. pbds平衡树使用pair防止物品重复。__gnu_pbds::tree<pair<int,int>,__gnu_pbds::null_type,less<pair<int,int>>,__gnu_pbds::rb_tree_tag,__gnu_pbds::tree_order_stastics_node_update> T;这一行不记得就使用code::blocks
  71. 仔细看题,有些新定义和你的原来理解不一样。
  72. 对于所有子区间的计数问题(容斥常用):i)分治+算贡献 2)直接算贡献 3)拆开算(若贡献相互独立)
  73. queue的默认插入端是back
  74. pbds tree join 的复杂度是假的
  75. 反向dp消除后效性
  76. 重申,哪个数字小对着哪个淦
  77. Another Way? Another Score? Another Sol? Do not be so worried. Do not be so hurried.Do not be so greedy.
  78. 利用三角形不等式构建贪心策略。eg.Gym 104077D
  79. $a_i$单调不减等价于$a_i+i$严格递增
  80. 慎用构造函数赋值。复杂度memset。
  81. 不要边读入边回答。
  82. 爆int128试着用long double

鸣谢:很多。

posted @   atarashiTLE  阅读(12)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示