要求是回文子串,考慮對兩個字串分別建出回文自動機,然後同時在起點出發(\(odd\)或\(even\)),始終按照相同字元的轉移走,那麼一定走到的是二者都含有的子串,沿途經過的點就是符合條件的回文子串了。於是用\(bfs\)或\(dfs\)實現均可,博主使用的是\(bfs\)方法,就先將\(0\)和\(1\)
\(push\)進佇列中,然後不斷取出隊首,更新答案,列舉兒子是否能走即可。
#includeusing namespace std;
const int n=3e5+10;
typedef pairpii;
#define mp make_pair
int n,m;
struct pam
inline void newnode(int x,int p,int v)
} inline void insert(int x)
}a,b;
int main()
printf("%d %d\n",ans,cnt);
return 0;
}
P5555 秩序魔咒
題意 給你兩個字串,求出這兩個字串的最長公共回文子串長度和個數 題解 我們可以對這兩個字串分別建回文樹,然後同時進行dfs,走相同的轉移邊,得到的回文串顯然是相同的,由於回文串的長度可以為奇數也可以為偶數,所以我們需要對奇根節點和偶根節點進行dfs,就可以找到最長公共回文子串長度了,至於個數,由於在...
秩序魔咒,洛谷P5555,廣義SAM PAM
雖然有一點難寫,但是挺好想的.大概就是用pam求出所有本質不同的回文串,然後在sam上看看對應點的right集合是否在兩點都出現過,希望有大牛發明出廣義pam?includeusing namespace std const int n 1200010 char s n t n int n,m,mm...
洛谷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...