【ural】1960. Palindromes and Super Abilities【Palindromic Tree】
2014-12-23 17:14
435 查看
传送门:【ural】1960. Palindromes and Super Abilities
题目分析:这题就是裸回文树了,按照读入顺序边插入边输出答案即可。。答案就是插入当前字符后回文树内表示回文串的节点个数。
代码如下:
题目分析:这题就是裸回文树了,按照读入顺序边插入边输出答案即可。。答案就是插入当前字符后回文树内表示回文串的节点个数。
代码如下:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std ; typedef long long LL ; #define rep( i , a , b ) for ( int i = ( a ) ; i < ( b ) ; ++ i ) #define For( i , a , b ) for ( int i = ( a ) ; i <= ( b ) ; ++ i ) #define rev( i , a , b ) for ( int i = ( a ) ; i >= ( b ) ; -- i ) #define clr( a , x ) memset ( a , x , sizeof a ) const int MAXN = 100005 ; const int N = 26 ; struct Palindromic_Tree { int next[MAXN] ; int fail[MAXN] ; int cnt[MAXN] ; int len[MAXN] ; int S[MAXN] , n ; int last ; int p ; int newnode ( int l ) { rep ( i , 0 , N ) next[p][i] = 0 ; cnt[p] = 0 ; len[p] = l ; return p ++ ; } void init () { p = 0 ; newnode ( 0 ) ; newnode ( -1 ) ; last = 0 ; n = 0 ; S = -1 ; fail[0] = 1 ; } int get_fail ( int x ) { while ( S[n - len[x] - 1] != S ) x = fail[x] ; return x ; } int add ( int c ) { int ret = 0 ; c -= 'a' ; S[++ n] = c ; int cur = get_fail ( last ) ; if ( !next[cur][c] ) { ret = 1 ; int now = newnode ( len[cur] + 2 ) ; fail[now] = next[get_fail ( fail[cur] )][c] ; next[cur][c] = now ; } last = next[cur][c] ; cnt[last] ++ ; return ret ; } void count () { for ( int i = p - 1 ; i >= 0 ; -- i ) cnt[fail[i]] += cnt[i] ; } } ; Palindromic_Tree T ; char s[MAXN] ; int n ; void solve () { int ans = 0 ; T.init () ; n = strlen ( s ) ; rep ( i , 0 , n ) printf ( "%d%c" , ans += T.add ( s[i] ) , i < n - 1 ? ' ' : '\n' ) ; } int main () { while ( ~scanf ( "%s" , s ) ) solve () ; return 0 ; }
相关文章推荐
- ural 1960 Palindromes and Super Abilities 题解
- URAL1960-Palindromes and Super Abilities
- URAL 1960 Palindromes and Super Abilities (Palindromic Tree)
- 回文树(回文自动机) - URAL 1960 Palindromes and Super Abilities
- [ural 1960] Palindromes and Super Abilities
- 回文树(回文自动机) - URAL 1960 Palindromes and Super Abilities
- 【URAL】1960. Palindromes and Super Abilities
- URAL - 1960 Palindromes and Super Abilities
- URAL 1960 Palindromes and Super Abilities (回文树)
- URAL 1960- Palindromes and Super Abilities (回文树)
- Ural 1960 Palindromes and Super Abilities
- Ural1960 Palindromes and Super Abilities
- Ural1960 Palindromes and Super Abilities
- 【后缀回文自动机】 URAL 1960 Palindromes and Super Abilities
- URAL1960 Palindromes and Super Abilities
- URAL 1960 Palindromes and Super Abilities
- Ural 2040 Palindromes and Super Abilities 2 回文自动机
- URAL 2040 Palindromes and Super Abilities 2
- URAL 2040 Palindromes and Super Abilities 2 (回文自动机)
- URAL 2040 Palindromes and Super Abilities 2 (Palindromic Tree)