雖然有一點難寫,但是挺好想的.
大概就是用pam求出所有本質不同的回文串,然後在sam上看看對應點的right集合是否在兩點都出現過,希望有大牛發明出廣義pam?
#includeusing namespace std;
const int n=1200010;
char s[n],t[n];
int n,m,mmax,num;
struct suffix_automaton
return ;
} int x=++tot,p=las;las=x;len[x]=len[p]+1;
while(p!=-1 && !ch[p][c]) ch[p][c]=x,p=fa[p][0];
if(p==-1) return ;
if(len[ch[p][c]]==len[p]+1) fa[x][0]=ch[p][c];
else
return ;
} void build()
} void solve(int r,int lenth)
}}sam;
struct palindrome_automaton
int gfail(int x,int pos)
void insert(int pos,int c)
las=ch[p][c];
} void build()
}pam;
int main()
P5555 秩序魔咒
題意 給你兩個字串,求出這兩個字串的最長公共回文子串長度和個數 題解 我們可以對這兩個字串分別建回文樹,然後同時進行dfs,走相同的轉移邊,得到的回文串顯然是相同的,由於回文串的長度可以為奇數也可以為偶數,所以我們需要對奇根節點和偶根節點進行dfs,就可以找到最長公共回文子串長度了,至於個數,由於在...
洛谷P5555 秩序魔咒 回文自動機
要求是回文子串,考慮對兩個字串分別建出回文自動機,然後同時在起點出發 odd 或 even 始終按照相同字元的轉移走,那麼一定走到的是二者都含有的子串,沿途經過的點就是符合條件的回文子串了。於是用 bfs 或 dfs 實現均可,博主使用的是 bfs 方法,就先將 0 和 1 push 進佇列中,然後...
洛谷P4070 生成魔咒
魔咒串由許多魔咒字元組成,魔咒字元可以用數字表示。例如可以將魔咒字元 1,2 拼湊起來形成乙個魔咒串 1,2 乙個魔咒串 s 的非空字串被稱為魔咒串 s 的生成魔咒。例如 s 1,2,1 時,它的生成魔咒有 1 2 1,2 2,1 1,2,1 五種。s 1,1,1 時,它的生成魔咒有 1 1,1 1...