回文自动机
LowestJN
强省弱OIer
展开
-
[回文自动机] BZOJ3676 [Apio2014] . 回文串
回文自动机的简单应用…#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int N=300010;int n,p,cnt=1;int nxt[N][30],fail[N],len[N],size[N];char a[N];inline voi原创 2017-10-13 13:34:32 · 348 阅读 · 0 评论 -
[分块 回文自动机] LOJ#6070. 「2017 山东一轮集训 Day4」基因
回文自动机那套理论可以在 翁文涛的集训队论文 里看每个串的回文自动机形态是固定的,一个子串的回文自动机也就是一个子图那么就可以用记忆化的方式来降低复杂度……我感觉好像就是论文里提到的“不基于势能分析的插入方法“#include <cstdio>#include <iostream>#include <algorithm>#include <vector>#include <map>#inc原创 2017-10-14 06:46:56 · 875 阅读 · 0 评论 -
[字典树上建回文自动机] ICPC Preparatory Series by Team Akatsuki. Three Palindromes
传送门dfs整棵树,记录根到当前结点的字符串,然后从父节点在回文自动机上对应的节点开始转移就行了用基础的插入方法会被卡成 O(n2)O(n^2)#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int N=100010;int n,cnt,tot原创 2017-10-14 07:42:07 · 478 阅读 · 0 评论 -
[回文自动机 fail树] Codechef April Lunchtime 2015. Palindromeness
传送门有个很显然的做法就是建出回文自动机,然后在fail树上倍增找到长度小于等于一半的最长的回文后缀。这样复杂度是O(|S|log|S|)O(|S|\log|S|)但实际上每个点也可以维护一个half指针指向它的合法回文后缀,那么找当前点的half就沿着父节点的half指针的fail指针网上爬就好了复杂度就是建回文自动机的复杂度 O(|S|log|Σ|)O(|S|\log|\Sigma|)fail树原创 2017-10-14 09:31:24 · 426 阅读 · 0 评论 -
[回文自动机优化转移] Central Europe Regional Contest 2014 G. Virus synthesis
一个可行的方案肯定是把一个回文串前后加上一些字符变成 SS 那么只要能DP出每个回文字串的方案就可以了,令这个方案为 ff如果一个回文串长度为奇数,那么它可以由 f去掉两端后的串+2f_\text{去掉两端后的串}+2 和 f最长回文后缀+leni−len最长回文后缀f_\text{最长回文后缀}+len_{i}-len_\text{最长回文后缀} 中的最小值转移过来。如果是偶数,那么它可以由 f去原创 2017-10-14 11:10:48 · 427 阅读 · 0 评论 -
[回文自动机 Manacher] BZOJ4166: 月宫的符卡序列
hash被卡… 本来以为是回文自动机裸题 发现fail树上一条链的节点表示的回文子串的中点是不一样的… 不过回文树上的链是一样的那么用建出回文树(我用回文自动机建的,manacher建不知道为什么WA了),然后找到以每个点为中点的最大回文子串,这个用manacher找在对应节点加上贡献就行了#include #include #include #include usin原创 2018-01-25 20:32:17 · 602 阅读 · 0 评论 -
[eertree] Codeforces 932G. Palindrome Partition
http://codeforces.com/blog/entry/19193不是很懂证明#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int N=1000010,P=1e9+7...原创 2018-03-05 10:31:47 · 709 阅读 · 0 评论