如何和出题人斗智斗勇?奇技淫巧汇总
.计算总体的贡献和的时候转化为考虑每个元素的贡献
.正序删边可以离线反向操作,变成加边。
.有相同的变量尽量挪到一边。
\(\displaystyle \sum_{i=1}^md_i=2m-2\)
\(\displaystyle \sum{(d_i-2)}=-2\)
.恰好变为至少,然后容斥原理。
.看到问题想一想能不能二分答案,容斥啥的。
.倘若题目告诉你“随机”数据的生成方式,它就不是真随机了,但通常并没有什么很大的用处。
.条件限制强、数据不大不小的题基本上就是网络流,或者是一些鬼畜的DP。
.(用堆)一步一步的生成自己想要的数据,例如:[NOI2010]超级钢琴,也可以用到边有生成规律的最小生成树上。
.关于序列上有关gcd的题目:要想到前缀gcd只有log种取值。
.乘法不好搞时看看能不能取对数转化为加法。
.一些难想到的算法:二分,根号,分治
.题目让你对某个给定的\(k\)的情况下求解,看看能不能由给定的值为其他值时转移到给定的值为\(k\)时的情况
.让你判断能不能到某个点 -> 给该点赋值inf,求最大值是不是>=inf
.一个地图有宝藏有陷阱,不能碰陷阱的条件下获得的宝藏最多:把陷阱改为权值-inf的宝藏后求最大值。
.多维的布尔数组可以省去一维,存的值变为省去的那一维。例子
.尺取法:确定l,r后,根据实际情况不断地推进l,r以得出答案。例子
.树上路径期望问题可以把每个节点的dp值表示 \(a \times f(fa) + b\)的形式 例题
.最优化所求的式子有多个变量时,枚举一部分,求剩下一部分最大/最小。例题
.一些题要是能DP,就先不要管时间空间复杂度(但不要太离谱)写出来状态和转移方程,然后尝试优化
.规律总结:对于有标号类问题,个体的exp就是集合,集合的ln就是个体
.二维平面上有n个点,求平面中的一个点(这个点不一定与给出的n个点重合),使其到所有点的距离和最小。
结论:确定x坐标时,关于y坐标的函数是单峰函数;确定y坐标时,关于x的函数是单峰的。(单峰函数-->三分)
.分块打表大法好
.DP无思路,把能输出的都输出看看有没有什么规律,比如决策单调性
.dsu on tree:\(1\) .没有修改 \(2\) .子树询问
.一些冷门但好用的算法:悬线法,wqs二分,dsu on tree
.关于限制条件:思考怎么来的( \(max(a_i-a_j) i,j \in [1,n]\) 就等价于 \(max(a_i)-min(a_i)\)),或者枚举条件
.式子里有绝对值就把绝对值拆开分情况讨论
.求的东西如果有精度误差(比如和正确答案相差<=1e-4即为正确)的时候,可以多跑几次“暴力”使误差达到允许的范围 例题
.重复一样的操作很多次,可以尝试快速幂/倍增
.一些比较难求的东西可以容斥一下
.学好贪心,能多拿很多分
.无法继续优化可能是因为求了不用求的东西。
.费用提前计算优化DP
.括号匹配问题,括号序列把匹配好的考好去掉,剩下的长这样:))).....))((...((
.括号匹配子序列=所有括号匹配区间
.二维前缀和很好使
.一步一步来,不要想一口吃成胖子