2019 年11月6号训练日记

最近把模板整理好了,知识点也总结了,然后预案也做了、这几天就好好调整心态,不要太紧张。

下面就是自己整理的

每个知识点的应用场景

并查集:

朋友圈问题

图的连通性

优化其他算法加速,这个可以尝试

家庭财产问题,亲戚问题

 

树状数组

最基本的区间查询及单点修改

树状数组的区间修改,使用差分的思想

二维树状数组,这个比较难,有的还可能会和容斥定理结合

树状数组求逆序对:一般想到逆序对可以使用归并排序,离散化加树状数组是一个更加快捷的方式

树形树状数组,树状数组与树的集合,常见方法为重新编号,并记录新编号节点的管辖区域。在求解子树权值和的时候还是相当实用的。但这个应用需要建边,要用到链式前向星,在比赛中遇到可以直接跳过。

树状数组求指定长度单调子序列,单调队列求逆序对的升级版。需要排除两数相等的情况,同时计算多区间符合数量

更多情况下,树状数组要与其他算法合用(如二分答案、前缀和优化之类的)才能发挥出最大的威力

 

线段树

最基本的单点更新,单点查询

然后就是区间更新,区间查询

最大区间子段和最大前缀,最大后缀,最大子段和

二维矩阵的区间问题使用二维线段树,基础模板题可以做

还有区间合并问题数据大的话使用线段树

区间染色问题可以用线段树来维护

扫描线问题

线段树和树状数组不同的是,树状数组只能维护前缀“操作和”(前缀和,前缀积,前缀最大最小),而线段树可以维护区间操作和。

 

RMQ

区间最大值最小值问题

还有二维的思路和一维一样

RMQ还可以和其他算法结合使用

 

树的直径问题使用树型DP或者DFS都可以

 

KMP

寻找最小循环节

寻找循环节的个数

求最长公共子序列

还有各种字符串的匹配

二叉树B是否为二叉树A的子树

 

后缀数组

单个字符串相关问题先构造后缀数组,然后求Height数组

可重叠的最长重复子串问题求Height数组的最大值

不可重叠的最长重复子串问题,熟练掌握Height数组的性质

分段的思想在后缀数组相关问题中很常用

可重叠的 k 次最长重复子串,一般二分来做,只需判断当前段内是否出现k个后缀即可。

重复出现子串计数问题,比较简单的SA题

Ans=∑max(Height[i]−Height[i−1],0)

不相同子串计数问题,就是n−sa[k]+1−height[k]个子串。

字典序第K子串问题,二分找

连续重复子串问题,枚举串S长度k,如果Rank[1]和Rank[k+1]的Height=|L|−k那么当前答案合法。

重复次数最多的连续重复子串问题,枚举子串长度k,看这个长度对应每个位置之间的LCP是否等于k最长能扩到哪里,就是重复出现次数。

一个字符串在所有字符串中出现次数问题

字符串子串重复出现k次问题,SA+线段树维护

字符串不同种连续子串问题,这个应该算是“前缀数组”吧。具体来说就是将字符串翻转后求一边SA,此时所得就是原串的前缀数组。

后缀数组一直是我的噩梦,希望比赛遇不到吧。

 

字典树

字符串检索问题

词频统计问题

字符串最长公共前缀问题

字符串搜索的前缀匹配问题

作为其他数据结构和算法的辅助结构,如后缀树,AC自动机等

 

AC自动机

给出L个模式字符串(加总长度为N),以及长度为M大文本,要求从大文本中提取每个模式字符串出现的位置。比KMP的复杂度要低

给你N个模板串和一个文本串,问你这些模板串在文本串中最多出现了多少次

带权值的AC自动机一般要和DP相结合。

现在要你推断一个长度=n的由小写字母构成的字符串S有多少种组成方式,和DP结合

 

Treap

这个我感觉使用的话就是查询第K大的数,删除,修改等操作其他的用法还没见到

 

还有区间查询第K大

树链剖分

 

在一棵树上进行路径的修改、求极值、求和,这个时候应该马上想到树链剖分

树链剖分解决子树问题

树剖+线段树可以维护的是树上的点权区间,如果是边权区间的话就要边转点

 

                           比赛预案

开场先把所有题目大致过一遍,看到熟悉的数据和关键字可以先标记一下

一道题一定要想清楚思路和算法细节后再写,想一想有没有更优的实现方式,特别是边界条件处理的这种。

跟着榜单做题,一道题过的人数就说明了一道题的难易程度,如果一道你认为使用的很难的算法的题目过的人很多,这个时候赶紧转变思路,想想是不是自己考虑复杂了。

看题目数据是否在某个地方会爆long long

根据数据规模推测算法复杂度,比如数据规模1e5,O(n2)肯定超时,想不出O(n)的方法,那就应该考虑O(nlogn)复杂度的算法,通常和二分、倍增、树有关的优化技巧。

对于时间复杂度可能过可能不过的题根据过的人数判断该不该写

出数据!出数据!,根据设计算法时候的条件设计数据,设计边界数据

数组开小可能会超时

注意题目数据范围、时间限制、其他限制条件

数学题可以打表看输出数据找规律

自己现在的实力根本没到那种去做AC人数只有几个人的题目,不要在那里浪费时间

双开!双开!一定要双开!卡题后马上下机,让出机位,打印代码找bug,两人去做新的题目。

如果同时进行两道题目,三人的话,找bug能力较强的那个人看两题,这样每道题都有两人看,可以商量。

打到后期一道题卡将近两个小时,如果有和这道题过题数差不多的题目立马换题。

感觉思路被卡了,心态不好了赶紧去厕所洗把脸,不在乎这三五分钟

做题时两人思路不同,冷静套路选取最优的那个,不要急,一定要冷静!

不到比赛最后一刻绝不放弃!奇迹总会有的

实在做不出来的题目最后暴力尝试几次

一定要放松,尽力而为就好!!!

你可能感兴趣的:(笔记)