Trick

Trick:

  1. x 与各位数之和模 9 同余(CF10C Digital Root
  2. st 表 和 线段树 可以存 gcd
  3. 注意函数增减性(CF1632D New Year Concert
  4. dp 时若下标太大,可以调换下标和存储的数值(CF1974E Money Buys Happiness
  5. 贪心不成立时,可以用反悔贪心(CF1974G Money Buys Less Happiness Now
  6. 乘法一般比加法更优(CF1872G Replace With Product
  7. '(' 看成 +1,')' 看成 1CF1976D Invertible Bracket Sequences
  8. atan2 可以求角度(CF257C View Angle
  9. 正难则反(容斥原理)(CF803F Coprime Subsequences
  10. 抓住数据的特殊性质,如 1018CF468C Hack it!
  11. 可以贪心+dp(贪心推性质,用 dp 做),经典单调队列优化 (CF797F Mice and Holes)
  12. 可以先取一个特殊点来做,通过特殊点的特殊性质来解题 (CF1559D2 Mocha and Diana (Hard Version))
  13. 数据很大时,可以考虑能否缩小范围,后面特殊处理 (CF1956E2 Nene vs. Monsters (Hard Version))
  14. fi,j,k 表示消除区间 [i,j]j 右边恰好 k 个与位置 j 相同字符的答案(CF1107E Vasya and Binary String
  15. 位运算可以在二进制下一位一位考虑(P4551 最长异或路径
  16. mex 等价于 总和<区间长度 用线段树二分找 (CF817F MEX Queries)
  17. 分块,用 unordered_multiset 维护块内是否存在一个数(CF551E GukiZ and GukiZiana
  18. 抓住题目的特殊性质,如 CF2038K Grid Walk,发现从一个与 (n,n) 互质的位置 (a,b)(n,n) 的答案为 a+b,而且 (a,b) 不会很大,暴力 dp 即可。
  19. 出现偶数次的数的异或和->出现过的数的异或和^去重后的数的异或和->类似于 hh 的项链 树状数组维护(CF703D Mishka and Interesting sum
  20. 减少不必要的查询->建线段树时用 st 表维护值(CF803G Periodic RMQ Problem
  21. 1n 的最小公倍数,可以筛质数的同时找每个质数的 x 次是否存在来更新答案以及 xP4626 一道水题 II
  22. 对于非递增序列 d1,d2,,dn,该度数序列可简单图化当且仅当 k[1,n],i=1kk(k1)+i=k+1nmin(di,k)(Erdős–Gallai 定理)(CF1091E New Year and the Acquaintance Estimation
  23. gcd(al,al+1,,ar)=gcd(al,gcd(al+1al,,arar1))P10463 Interval GCD
  24. 非重组合 Cnm,可重组合 Cn+m1m。上升 -> 组合后排序 (P5135 painting
  25. 分类讨论边的类型(最小生成树上边 or not)来计算答案(CF733F Drivers Dissatisfaction
  26. 并查集可以跳过很多无效答案,可以用来优化暴力 (CF200A Cinema
  27. 可以把石子看成网格图,从左下角出发,每堆石子拿一个看成往上走(AT_agc002_e Candy Piles
  28. 可以考虑枚举因子来计算(CF1499D The Number of Pairs
  29. 转化题目给定的条件,差分来做(CF1710B Rain
  30. dp 前可以构造一下,如(CF1930D2 Sum over all Substrings (Hard Version)),通过构造发现,对于 s 中每个 1,只需要 i 的贡献,而且不需要考虑前两个,由此得到转移方程
  31. 发现从小到大取最优,就从小往大做,直接把选了的数扔进 set 里,用树状数组维护删掉后的贡献(CF387E George and Cards
  32. 对于不容易求的量,可以通过其他相关的量来转移(P4550 收集邮票
  33. 一段数 +1 等价于 其他数 1P6544 [CEOI2014] Cake
  34. 可以拆贡献,分为 不变的 和 变化的(与位置有关),分别维护 (CF396C On Changing Tree
  35. 考虑环的情况,如 CF2045G X Aura 正环倒过来走成了负环,于是题目转化为树的情况
  36. 恰好 =k 转化为 k 的方案数,前后差分,得到 恰好(CF1188C Array Beauty
  37. 直接高精度维护会超时,考虑延迟更新,只要每次 /2 的时候更改后两位就可以了(P5513 [CEOI2013] Board
  38. 树链剖分性质:dfn 连续,所以可以用 set 来维护,查询时二分(ZR 2858 苹果树
  39. 线段树上挂 vectorP4215 踩气球 & P10590 磁力块
  40. 线段树可以对应一个 2n 长的序列(CF1401F Reverse and Swap
  41. 总和 = 期望 × 总方案数(AT_agc030_d Inversion Sum
  42. 一个合法的括号序列的前缀和总大于等于零且本身的和为零
  43. 抽象成平面直角坐标系,从 (0,0) 出发,每一个 1 看成 (0,0)>(1,1)0 看成 (0,0)>(1,1)P1641
  44. 可以对每一个深度都建一颗主席树(CF893F Subtree Minimum Query
  45. 设原本在位置 i 上的逆序对数为 ci,冒泡排序一轮后,位置 i 上的逆序对数变为 max(0,ci+11)P6186 [NOI Online #1 提高组] 冒泡排序)。

代码部分:

  1. vector 最好不要直接排序,常数大,可以用索引来排序。
  2. 注意算术优先级(加括号)!!
  3. 数组越界要特判,比如下标从 0 开始时 i-1 要特判一下。
  4. 图论时的输入有时从下标 2 开始读入。
  5. 二分时 l+r 若超出 long long 范围,可以用 mid=l+(rl)/2
  6. 不要写 unordered_map,用 map
  7. string 类如果写了 s=" "+s; 之类,n=s.size() 应写在前面。
  8. st 表要调用 log 的预处理!!
  9. n<<1 不要写成 1<<n
  10. 递归不要忘写函数名
  11. 数位 dp 初始化最好为 1
  12. 尽量不要太压行,不能想当然把一样的东西合并了,想一想有没有先后顺序(会不会又重复变量?)
  13. 不要运行错代码!!!
  14. 离散化,有些可能要开两倍甚至三倍

else:

容斥原理

|i=1nSi|=1in|Si|1i<jn|SiSj|+1i<j<kn|SiSjSk|+(1)n|S1S2Sn|

二项式反演

  • 形式一:

g(n)=i=0n(1)i(ni)f(i)f(n)=i=0n(1)i(ni)g(i)

  • 形式二:

g(n)=i=0n(ni)f(i)f(n)=i=0n(1)ni(ni)g(i)

  • 形式三(至多和恰好的转化):

g(n)=i=nN(Ni)f(i)f(n)=i=nN(1)Ni(Ni)g(i)

  • 形式四(至少和恰好的转化):

g(n)=i=nN(in)f(i)f(n)=i=nN(1)in(in)g(i)

posted @   见合  阅读(50)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示