P5555 秩序魔咒

2021-09-29 02:16:49 字數 660 閱讀 3996

題意:給你兩個字串,求出這兩個字串的最長公共回文子串長度和個數

題解:我們可以對這兩個字串分別建回文樹,然後同時進行dfs,走相同的轉移邊,得到的回文串顯然是相同的,由於回文串的長度可以為奇數也可以為偶數,所以我們需要對奇根節點和偶根節點進行dfs,就可以找到最長公共回文子串長度了,至於個數,由於在回文樹中,每個回文串一定是不同的,所以也可以統計出不同最長公共回文子串的個數

#include

using

namespace std;

const

int maxnode =

3e5+50;

int max =

0,tot =0;

struct palion

void

insert

(char ch,

int en)

lst = nxt[root]

[ch-

'a'];}

}pam1,pam2;

void

dfs(

int x,

int y)

int n,m;

char str1[maxnode]

,str2[maxnode]

;int

main()

秩序魔咒,洛谷P5555,廣義SAM PAM

雖然有一點難寫,但是挺好想的.大概就是用pam求出所有本質不同的回文串,然後在sam上看看對應點的right集合是否在兩點都出現過,希望有大牛發明出廣義pam?includeusing namespace std const int n 1200010 char s n t n int n,m,mm...

洛谷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...