回文樹的應用

2021-09-30 15:46:19 字數 1093 閱讀 1745

聽說,這個演算法能將一些難處理的字串題目變成裸題,菜菜學學!沒想到18南京網路賽碰到了,居然想不起來了,可惡!

計蒜客 30998

題目: 問字串(『0』~』9』)裡面不同本質的數字字串代表的數字之和模(1e9+7).

回文樹裸題,設定en[i]陣列,來記錄節點代表回文串的末尾在字串中的id,代表的數字取模我們可以用字首和來實現: 444123321 中123321的值:

sum

[444123321]−

sum[

444]∗10

6;即將

123321全變為0s

um

[444123321]−

sum[

444]∗10

6;即將

123321全變

為0

#include 

#define llt long long

using namespace std;

const int maxn = 2e6+77;

const int n = 10;

const int

mod = 1e9+7;

struct pt

void init()

int find_fail(int x)

void add(int a)

last = nxt[cur][a];

}}p;char s[maxn];

intsum[maxn],pow_10[maxn];

int main()

llt ans = 0;

for(int i=2;isum[p.en[i]])%mod;

ans = (ans - 1ll*sum[p.en[i]-p.len[i]]*pow_10[p.len[i]]%mod+mod)%mod;

}printf("%lld\n",ans);

return

0;}

回文樹 模板

類似ac自動機,樹裡面每個節點代表主串的乙個回文子串,且每個回文子串都不同 主要功能 1.求串s字首0 i內本質不同回文串的個數 兩個串長度不同或者長度相同且至少有乙個字元不同便是本質不同 2.求串s內每乙個本質不同回文串出現的次數 3.求串s內回文串的個數 4.求以下標i結尾的回文串的個數 con...

回文樹總結

寫馬拉車還不如寫回文樹。by 陳菊開 原 請轉2017年集訓隊 回文樹及其應用 by翁文濤 我感覺回文樹 回文自動機相較於字尾自動機還是要好理解一點的 像我這種菜雞到現在還不是很懂sam 回文樹,顧名思義,就是要把乙個串的所有回文子串丟到一棵樹上。那要向sam一樣記錄個什麼鬼 endpos 啥的嗎?...

回文樹總結

首先,回文自動機就是回文樹。不愧是 texttt 在 csp 模擬賽裡面考 pam 然後全場就我切了 求乙個由小寫字母 a z 構成的串的本質不同的回文子串數量。首先考慮把每乙個子串列舉出來,然後判斷是不是回文串再把它 hash 進 map 或者是 hash table 裡面。複雜度 theta n...