一些技巧
最重要的是思维方式,真的!
对我来说,一旦一条思路5分钟内出不来结果那么就是废了
所以之前一直在一个尽头浪费时间,现在要学会往回走了!!
随机数的运用
1、对于异或的规范,如果我们要求一些东西必须在一起,那么我们可以赋随机权值使得这些东西异或和为0
2、判断是否合法的东西,如果要加法,但是只能实现减法,我们可以赋随机权值,比如行列式和积和式
染色法
1、区分两种情况,如果不太好统计的话,我们可以每次染一种新颜色!
2、也可以区间加值
计数
1、当限制太多的时候,容斥是最好的选择
2、关于图的容斥,第一种是容斥联通图,枚举第一个点所在的连通块;第二种是枚举连通块容斥,比如有时候钦定边集
3、有关于组合数,如果可以找到组合意义将其转换,那么可以一试
4、转化题意,可以提出一些无关项使得题目进一步简化,列式子很重要!!
生成函数
1、OGF是组合,EGF是排列
2、fwt的每一位的变换可以以任意顺序进行,所以可以对一个东西进行复合fwt,也就是每一位可以或与异或,fwt时判断当前位是啥就行,最外层枚举的是变换的数位,判断一下当前位是啥变换(7.18T2)
dp
1、当转移是两维并且转移没有顺序的时候,可以尝试在脱离顺序时交换两维
2、若dp值在实数域上,可以根据dp的点来离散化,比如根据大小关系
3、dp定义的设计可以是目前还剩下几个分散的段,每次链接两个段或者独立成一段....
4、一个有关将一个数划分成几个互不相同的数的方案的dp,发现划分成的数的数量是根号n级别的,有两种dp方式,第一种比较传统,每次添加一个1或者全局+1,但是这个必须要记录两维比较有局限性;第二种的话,我们可以尝试将上一个dp优化一下,上一个相当于是从1加到\(\sqrt{n}\),每个数不限制加多少个,如果加过i,那么必须加i-1,这个是为了保证没有重复的数,要保证这个东西,最好是从\(\sqrt{n}\)加到1,这样每次先强制加,然后做完全背包就行了,复杂度降为\(n\sqrt{n}\)
5、直接dp有的时候不好写,可以尝试差分序列、映射序列等等
6、矩阵优化,有的时候不好看出来,可以多设几个变量
7、有时候可以给dp状态的维度之间的关系,可以有一些优化
8、将一些必要的贪心策略融入dp中可以得到很好的转移方程
9、不要总是尝试一点一点加贡献,可以先把所有的贡献加进去,在一点一点除掉不该有的贡献!!
概率期望
1、期望拆,拆开就是对的
SAM和后缀树
1、反串建SAM就是后缀树
2、SAM上可以写搜索找第K大,后缀树上可以给边排序找第K大(这个需要先按照长度排序)
3、一般找子串对应节点都是找前缀的结尾节点然后倍增
bitset
1、可以用来匹配字符串!!用26个bitset与来与去
分治
1、发现之前就没有会过这个东西,一些复杂的东西如果可以拆成两个部分的话,分治是个不错的选择
圆方树
1、就那么一个套路吧,分圆点方点转移,其实还是挺套路的
最短路
不要写spafa,会死人的!!!
欧拉回路
其实许多东西连在一起似乎就是这个诶
决策单调性
1、分治比较好写,也可以用CDQ分治
2、一般用四边形不等式推式子,注意这个东西并不单调的
数位
1、异或有两种做法,trie树和线性基
2、不要尝试转化成可以维护的形式了,一般都是有规律的
其他
1、做题时可以尽量用数学语言描述我的答案,这样优化起来更加容易
2、尽量分类讨论,这样的做法可以极大的启发思路;可以先考虑问题的一部分,然后拼接起来
3、猜结论非常的重要,猜完去构造或者证明,一般都是对的!
4、降低复杂度是可以尝试将复杂度转移到较小的变量上
5、观察性质观察性质观察性质!!!
6、线段树的应用不只是数据结构,有的时候可以用线段树的区间的性质解决一些问题!!
7、序列问题的暴力可以使用珂朵莉树,set有时候非常好用
8、支配对的思想很重要,比如说求最大值和次大值,按照包含最大值和不包含最大值分类,这样就容易许多!
9、判定问题可以用折半再更新的方式优化复杂度!
10、可以尝试归约问题,就是用一些比较规范的结构来解决非常杂乱的问题,可以使用一些现成的数据结构,线段树,点分树,树剖,生成树,
11、需要历史版本的不一定是可持久化数据结构,可以离线的话就建立版本之间的关系,然后就可以不用可持久了...
12、计算贡献的时候可以拆开算每一个点的贡献,比如区间和的问题...
13、线段树维护序列的问题:扫描线,还是原来的话,尽量写成形式化语言,写成几个条件的满足形式
14、减少对无用信息的无用计算哦
15、平衡复杂度,根号分治是一种办法,小于根号的可以平方,还有另外一种:分别计算子集信息或者补集信息,这样复杂度可以降低一半,在指数级做法中尤为重要!
16、可以应用调整法来求答案,找到调整一次之后的答案变化就行!
17、确定答案,可以不择手段,可利用二进制数来逐位确定,每一位可以看出现次数,就是大概这个意思,可以不直接求,我可以通过不同操作的不同结果来确定答案