博弈论简单算法 题目简述:有n颗石子,甲先取,乙后取,每次可拿1-m颗石子,轮流拿下去,拿到最后一颗的人获胜。先想当有m+1个石子时候不论先手取多少个 后手一定可以一次性取完,所以后手一定赢。那么再思考如果有n*(m+1)个,先手取k个,则后手取m+1-k个保证每一个周期结束后数目仍然是m+1的倍数。直到剩m+1个的时候,先手取完后,后手全部取完。如果不是m+1的倍数那么先手只需要一定数目的石子让其变为m+1的倍数即可 所以有当n%(m+1)==0先手必败n%(m+1)!= 0先手必胜。
Manacher算法模板 Manacher算法用于计算最长回文串的长度,时间复杂度为需要先对字符串进行预处理,方便统一处理偶数和奇数字符串,具体为将abba变为$#a#b#b#a#&之后再通过一个分类讨论,主要是优化了已经计算过的子回文串长度的重复计算,具体的讨论以及推导还是看书吧,能看懂但讲不出来阿巴阿巴。
ET算法【动态规划】 线性dp:dp[i][j] 由 dp[i - 1][j] 通过加减乘除等线性运算得到状压dp:dp[i][j] 表示一个用二进制数表示的子集来反映当前状态,如7 =(111)(选了三个)期望dp:dp[i][j] 表示期望或者概率存在性dp:dp[i][j] 表示目标状态是否存在树形dp:通过树状结构来状态转移,通常用到DFS数位dp:[1,n]之中包含多少个69。
ET算法【最短路】 贪心(每次找最近点进行拓展)+ dp(选取最优方案)先选取出发点st,拓展该点的所有出点,并更新出点的权值(即到st点的距离),再拓展所有出点中权值最小的出点,每个点只拓展一次数据加强版。
ST表模板 ST表适用于可重复贡献问题,即对于运算opt,满足x opt x = x,则对应的区间询问就是一个可重复贡献问题,例如max( x , x ) = x , gcd( x , x ) = xST表应用最广泛的领域便是解决RMQ问题:给定n个数,m个询问,对于每个询问,需要回答区间[ l , r ]中的最大值或最小值(可以采用两个数组同时进行处理)。基于倍增的思想,ST表可以实现O(nlogn)下进行预处理,并在O(1)时间内回答每个询问。如果仅仅进行区间最值查询,ST表的效率完全吊打线段树;
Hash哈希模板 取一个特殊的进位,比如小写字符串就取26进制,将字符串中的每个字符都转化为唯一对应的一个数字,再像十进制那样计算该字符串的总和,就能得到一个字符串对应的唯一确定值首先不要把任意字符对应到数字0,比如假如把a对应到数字0,那么将不能只从Hash结果上区分ab和b(虽然可以额外判断字符串长度,但不把任意字符对应到数字0更加省事且没有任何副作用),一般而言,把a-z对应到数字1-26比较合适。进制的选择实际上非常自由,大于所有字符对应的数字的最大值,不要含有模数的质因子(那还模什么)
ET算法【并查集】 今天是2023.12.9已经结课了,但又没完全结课,课表上下周是只有一节体育课,可是家人们谁懂啊,下周居然是课程设计,五天早八自习,下午也要去自习,做完了也要去,说什么帮助同学,so有没有人来帮帮鼠鼠我呢。还有好多论文要写,英语论文,公选课论文,体育论文,没错还有体育论文......今天是81.21.3202,经过一周的课设摧残,只会写printf了,已经疯掉了。果不其然周日的THUPC只做出来签到题,我们仨真强.jpg。