題目背景
模板題,無背景(其實是我想不出背景)。
題目描述
給定乙個字串 s。保證每個字元為小寫字母。對於 s 的每個位置,請求出以該位置結尾的回文子串個數。
這個字串被進行了加密,除了第乙個字元,其他字元都需要通過上乙個位置的答案來解密。
具體地,若第 ii(i≥1) 個位置的答案是 k,第 i+1 個字元讀入時的 ascii 碼為 c,則第 i+1 個字元實際的 ascii 碼為 (c−97+k)mod26+97。所有字元在加密前後都為小寫字母。
輸入格式
一行乙個字串 s 表示被加密後的串。
輸出格式
一行, ∣s∣ 個整數。第 i個整數表示原串以第 i個字元結尾的回文子串個數。
輸入輸出樣例
輸入 #1
debber
輸出 #1
1 1 1 2 1 1
輸入 #2
lwk輸出 #2
1 1 2
輸入 #3
lxl輸出 #3複製
1 1 1
說明/提示
對於 100% 的資料, 1≤∣s∣≤5×10^5
理解了pam,這題真的很簡單了
**:
#include
#include
#include
#include
#define maxx 500005
#define n 26
using namespace std;
typedef
long
long ll;
int ans[maxx]
,tot;
struct pam
void
init()
inline
intgetfail
(int x)
inline
void
insert
(int c)
last=nex[cur]
[c];
ans[tot++
]=num[last]
; cnt[last]++;
}void
count()
}pam;
char c[maxx]
;int
main()
printf
("%d"
,ans[0]
);for(
int i=
1;i)printf
(" %d"
,ans[i]);
printf
("\n");
return0;
}
題解 洛谷P5496 模板 回文自動機(PAM)
建立pam,當第i個字元插入後,就可以得到以i位置為結尾的回文子串個數 fail樹上奇根到lst的節點個數 不包括奇根 即lst在fail樹上的祖先個數。這個屬性可以在extend時維護,num i num fail i 1.littlefall hello include using namesp...
回文自動機(PAM) 學習筆記
無。強行說和kmp有關也是可以的 1.乙個長度為 n 的字串最多有 n 個本質不同的回文子串。2.對於乙個字串 s,如果在其之後新插入乙個字元,那麼最多產生一種新的回文子串。證明 假設加入這個字元之後得到的最長回文字尾為 t,那麼對於長度小於 t 的任何回文字尾,它們必然在更前面的位置出現過。如圖所...
回文自動機模板
回文自動機每個節點代表了乙個回文串 能求出來的有 1 本質不同的回文串的個數 tot 1 2 每種回文串出現的次數 cnt陣列 3 每種回文串的長度 len陣列 4 以當前節點為字尾的回文串個數 sed陣列 5 每個回文串在原串出現的位置 record陣列 include using namespa...