随笔分类 - 字符串--------------------------
摘要:【算法】(manacher+贪心)||(manacher+DP+树状数组/线段树) 【题解】 manacher求回文串,后得到线段,做一点计算映射回原串线段。 然后问题转化为可重叠区间线段覆盖问题,可以贪心解决。 排序左端点,同一左端点取最长段,然后在此段中找到右端点最靠右的线段,线性更新并累加。
阅读全文
摘要:【算法】manacher 【题解】【算法】字符串 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=300010; int n,p[maxn]; char s[maxn
阅读全文
摘要:【算法】后缀数组 【题解】后缀数组 由于m太大,先离散化。 然后处理SA和LCP。 最后用单调队列处理即可。 注意实际上队列头尾长度限制是K-1. 删队尾不要删过头 i≥K才能开始统计答案。 #include<cstdio> #include<algorithm> #include<cstring>
阅读全文
摘要:【算法】后缀数组 【题解】把数组复制一遍然后SA处理即可。 后缀数组 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=300010; int sa[maxn],bas
阅读全文
摘要:【算法】KMP 【题解】题目要求的是数量而非长度……QAQ BZOJ 3670 NOI2014 动物园 KMP算法 KMP树结点是0~n,根节点是0,树边就是失配边,跑失配边其实就是跑向父亲(所以它是后面所有后缀与它一样的字符串的祖先)。 题目要求的是满足要求(长度<一半)的前后缀相等的数量,若不考
阅读全文
摘要:【算法】AC自动机 【题解】本题注意题意是多少关键字能匹配而不是能匹配多少次,以及可能有重复单词。 询问时AC自动机与KMP最大的区别是因为建立了trie,所以对于目标串T与自动机串是否匹配只需要直接访问对应结点,而不用真的比较。 因此可以预处理出拥有对应节点的失配串,不用一次一次跑前跑去找一样的。
阅读全文
摘要:【算法】KMP 【题解】KMP中n-next[n]得到最小循环节的性质。 考虑一个循环串(最后一个循环节可能残缺),它最长的【后缀=前缀】一定是以第二个循环节为起始位置的后缀。 正着考虑的话假设后缀T以x+1开始,S为前缀那: 1.S(1~x)=T(1~x)即S(x+1~2x) 2.S(x+1~2x
阅读全文
摘要:【算法】KMP 【题解】【算法】字符串 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=1000010,maxm=1010; char A[maxn],B[maxm]
阅读全文
摘要:把字符串原样复制一遍放在后面是惯用套路,此时字符串数组开两倍! ★字符串算法的核心是构造失配指针! 【字符串哈希】 双蛤习取模保险,毕竟连自然溢出都是能卡的…… 例题:【CodeForces】961 F. k-substrings 字符串哈希+二分 用于O(1)判断两个字符串是否相等:对于s[i~j
阅读全文
摘要:【算法】 【算法】网络流 【算法】树 【算法】数学 ————【专题】生成树计数(矩阵树定理) ————【专题】计数问题(排列组合,容斥原理,卡特兰数) ————【算法专题】卡特兰数(计数数列) ————【专题】数论 ————【专题】概率和期望 【算法】动态规划 【算法】数据结构 ————【专题】平衡
阅读全文

浙公网安备 33010602011771号