回文自動機學習部落格: (我喜歡這個**風格)
這個思想講解的更好:
思路:
對a ,b跑一次回文自動機,然後分別搜偶數長度的串, 奇數長度串。
code:
#include
#define ll long long
using
namespace
std;
const
int ax = 2e5+666;
char a[ax];
char b[ax];
ll res;
struct ptree
cnt[p] = 0 ;
num[p] = 0 ;
len[p] = l ;
return p++;
}void init()
int get_fail( int x )
return x ;
}void insert( char c )
last = next1[cur][id];
cnt[last]++;
}void count()
} };ptree a , b ;
void dfs( int u1 , int u2 )
}return ;
}int main()
a.count();
b.init();
for( int i = 0 ; i < lenb ; i ++ )
b.count();
for( int i = 0 ; i < 26 ; i++ )
}for( int i = 0 ; i < 26 ; i++ )
}cout
<< res << endl;
return
0 ;}
字串 字尾自動機
struct sam void extend int c if p 0 int q nxt p c if len p 1 len q int v siz mc nxt v nxt q len v len p 1 lnk v lnk q cnt v 0 while p 0 nxt p c q lnk ...
回文自動機
回文自動機,又叫回文樹,是由俄羅斯人 mikhailrubinchik於2014年夏發明的 這是一種比較新的資料結構,在原文中已有詳細介紹與 實現。回文樹其實不是嚴格的樹形結構,因為它有是兩棵樹,分別是偶數長度的回文樹和奇數長度的回文樹,樹中每個節點代表乙個回文串。為了方便,第一棵樹的根是乙個長度為...
回文自動機
乙個節點表示乙個回文串。tot 節點個數,即不同回文串的個數。兩棵樹,節點為0,1,所以最後計數時從2開始 n 新增的字元個數 last 新新增乙個字母後所形成的最長回文串表示的節點 nxt i c 節點i表示的回文串在兩邊新增字元c後變成的回文串編號 兒子 cnt i 節點i表示的本質不同的串的個...