如何和出题人斗智斗勇?奇技淫巧汇总

.计算总体的贡献和的时候转化为考虑每个元素的贡献

.正序删边可以离线反向操作,变成加边。

.有相同的变量尽量挪到一边。

\(\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

.括号匹配问题,括号序列把匹配好的考好去掉,剩下的长这样:))).....))((...((

.括号匹配子序列=所有括号匹配区间

.二维前缀和很好使

.一步一步来,不要想一口吃成胖子

posted @ 2020-01-08 06:59  wljss  阅读(403)  评论(2编辑  收藏  举报