Tricks(长期更新)
会很杂,尽量分类,每个trick会配题。
难以分类的
难以分类可能只是自己太菜了。
一类断开/分割/etc.相关的问题
考虑时光倒流,改成合并,然后大概率变得好做好想了。
而且合并的时候限制会比正着想少很多,因为随便一种合并的方法都可以对应一种合法的分割方案。
在很多题中都有出现,如DP,贪心,图论等。
曼哈顿距离与切比雪夫距离的转化
对于两点
画图可以发现到原点的曼哈顿距离为
我们可以想到二者可以相互转化。
大力推一下:
容易发现这就是
懒得敲完了自己看看吧
容易发现这就是
以上两种转化也可以视作旋转了坐标轴。
给出序列
-
从
到 -
从
到 -
从
到 -
从
到
问能否从
考虑换系,将
数据刚好比可以搜的范围大一点的
考虑折半搜索,可以把指数砍半(或许可以理解成一种根号?)。
但是也有可能不是折半而另有正解。
图论
生成树
有向图中的内向/外向、最小/最大生成树
别太死板了以为只有无向图最小/最大生成树。
有向图中的内向/外向、最大/最小生成树是类似的。
具有高度对称性的图
咕咕咕。
差分约束
满足构造题的限制
大概率就算看出来也写不了。
就是转化题意后发现每个位置上都会加减一些东西,还要满足结果在一个范围内,那么就列出不等式,尝试差分约束。
树论
对 的转化
求
DP
关于单调性
大力分析单调性总是好的。
关于前缀和
前缀和优化很好,但是定义DP数组时别直接定义前缀和形式的东西。要计算答案时再计算前缀和就好,别急。
关于字符串上的DP
或许可以当成字符串题做,用一些字符串算法(或者只是思想)结合DP。
长度至少为 的最大子段和
trivial的问题,先钦定一段长度为
钦定必须选某个数 的最大子段和
稍微改动了一点,定义
求两段的和最大
将两边的最大子段和加起来就行。
就是求出最大子段和后拼起来。
在转移的很多段里面DP的答案不变
把会使答案改变(或者说是会对答案产生贡献/影响)的点单独取出来跑DP。
莫名感觉像虚树(?
可能只是常数优化,但是常数有时也很重要。(不得不提某场校测(2024.10.21 T2)里
定义域和值域互换
类似反函数。就是要求的一个东西值域很小而限制的值域很大,状态数太多了或者不好转,就上反函数。
比较冷门,但很牛。
求从
发现要是直接把边权扔到状态里就爆了。
于是换一下,设
然后就可以转了,状态数是
给状态加入更多限制
不好转,就多加限制。
这不一定体现在状态维数的增加,也可以是在状态之外钦定一些东西。
考场上定义了很多种状态,例如考虑
考虑给状态加入在维度之外的限制。定义
首先答案是
然后考虑第
搞掉艾弗森括号
需要分析一点有艾弗森括号的式子的性质,然后化简为繁,再化繁为简。
后面化来化去的或许可以考虑将一坨只带一个真实的变量的式子用一个东西表示,如下文
观察值域后也可以考虑将值压到下标上。
还是这道题。
设
其中
我们记
我们本来希望尝试记录前缀最大值直接优化,但是发现
观察一下,我们发现至少前两项是放在一起的,记
再想想,艾弗森括号成立时,对于这个式子,值肯定比不成立时更大。于是可以对于成立和不成立两种情况分别取
写成式子:
然后前面的那一项就是
对于后面那一个,考虑记
最后,转移就变成了
以上的转移过程都是
压缩状态,但不是状压
状态里可以相互推导/具有某种特定联系的,可以尝试去掉其中几个维度。
第一直觉是定义
继续观察一下,发现回答完第
考虑转移:
发现有绝对值,但其实对
状态数还是很大,但是还好。第一种转移只对于一个位置改,第二种转移是对所有状态加上常数。于是上线段树,维护全局加,单点修,单点查就好。
矩阵优化
直观地可以看到状态中有一维范围很大,于是把这一维放到矩阵中递推,然后上快速幂。同时可能有多次询问。
状态数/转移数的优化
手玩一下发现转移其实很少/状态其实很少,就都存下来,再去跑。
关于排列的定义域和值域
其实会发现这两个东西很模糊,因为都是从
转移过程中会遇到特殊点/特殊限制
在特殊点处停下来,特殊转移一下,再继续跑。
二分
中位数
二分一个
二分hash
同字符串。什么字符串技巧都不会的时候,会这个就够了。
字符串
比较两个字符串的大小
二分+hash求LCP,然后比较后面那个字符,是
结合倍增
跳border的时候可能会跳很多次,用倍增的思想可以优化至
如用类似ST表一样的思路,定义
对KMP的改造
有时可能要求最短border。考虑在KMP的过程中递推这个东西。
设
在
-
时,若 ,则 ;若 ,则 。 -
时, 。
特别的,
构造/Ad-hoc
关于图的形态的构造
多尝试特殊形态的图,记录一下:
-
链
-
菊花图
-
树
-
链套菊花
-
基环树
-
网格图
(2024.10.23 T1就是先考虑链,然后对链调整,改造成链套菊花。)
数学
发现联考T1都放聪明的数学题,感觉需要记录一下。
二进制相关
二进制下找因子
听上去就很扯淡。
但是这是真的。
发现
数论相关
余数找环
注意到
和式相关
最大化一段前缀与一段子段的和
最大化
有个结论:
可以反证,设
并且还可以加强一下,当包含的时候,一定有
在一次比赛中(2024.11.25),出题人加上了需要保证
分治
求关于每个区间的信息
发现这种都可以考虑分治。是很好的思考方向。
求出每个区间的最大前缀和之和
上接最大化一段前缀和一段子段的和。
要求出每个区间的最大前缀的和。这里前缀可以取一段空前缀,即一个区间的最大前缀和可以为
记前缀和
从大到小枚举
那么对于一个确定的
求出每个区间的最大子段和之和
上接最大化一段前缀和一段子段的和。
以及上接求出每个区间的最大前缀的和。
发现单调栈的做法不太好延续过来,遂放弃。
考虑分治(因为区间的最大子段和就是考虑分治)。现已分治到
考虑对于每个在
考虑从
然后考虑
将
现在考虑在已经处理出
考虑第一种
考虑第二种
综上,
挂个原题:Treasure Hunt。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效