日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2019牛客暑期多校训练营(第四场)I - String (后缀自动机+回文树)

發布時間:2024/4/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2019牛客暑期多校训练营(第四场)I - String (后缀自动机+回文树) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接

題意

給一個字符串,求字符串子串的最大集合,集合中字符串互不相等,相等的定義為:a=?ba =\not ba=??b 而且 a=?rev(b)a =\not rev(b)a=??rev(b)
例如字符串abacabacabac,最大不相等集合 {abac,b,a,ab,aba,bac,ac,c}\{ abac,b,a,ab,aba,bac,ac,c\}{abac,b,a,ab,aba,bac,ac,c}

思路

我們可以將字符串SSS改為S+#+rev(S)S + \# + rev(S)S+#+rev(S),對于這個新字符串可以用Sam求出不包含#\##的子串的種類數

  • S=?rev(S)S =\not rev(S)S=??rev(S)的子串就會計算兩次
  • S=rev(S)S = rev(S)S=rev(S)的子串就會計算一次,這個剛好是回文串

所以Sam計算的種類數加上所有的回文數就是ans×2ans × 2ans×2

如何計算不包含#\##的子串?
  • 所有子串 - 包括#\##的字串 (len+1)2(len + 1)^2(len+1)2
  • 對Sam進行拓撲排序,按照有效邊進行轉移
#include <bits/stdc++.h> const int maxn = 4e5 + 5; using namespace std; struct SAM{int trans[maxn<<1][27], slink[maxn<<1], maxlen[maxn<<1];int indegree[maxn<<1], endpos[maxn<<1], rank[maxn<<1];int last, now, root, len;inline void newnode (int v) {maxlen[++now] = v;}inline void extend(int c) {newnode(maxlen[last] + 1);int p = last, np = now;// 更新transwhile (p && !trans[p][c]) {trans[p][c] = np;p = slink[p];}if (!p) slink[np] = root;else {int q = trans[p][c];if (maxlen[p] + 1 != maxlen[q]) {// 將q點拆出nq,使得maxlen[p] + 1 == maxlen[q]newnode(maxlen[p] + 1);int nq = now;memcpy(trans[nq], trans[q], sizeof(trans[q]));slink[nq] = slink[q];slink[q] = slink[np] = nq;while (p && trans[p][c] == q) {trans[p][c] = nq;p = slink[p];} }else slink[np] = q;}last = np;// 初始狀態為可接受狀態endpos[np] = 1;}inline void build(char *s) {root = last = now = 1;for (int i = 0; s[i]; ++i) extend(s[i] - 'a'); // extend(s[i] - '1');}inline long long getNum() {long long ans = 0;for (int i = 2; i <= now; ++i) {ans += maxlen[i] - maxlen[slink[i]];}return ans;} }sam; struct Palindrome_Tree{int nex[maxn][26];int fail[maxn], cnt[maxn], num[maxn]; // num 記錄每個節點右端點的表示回文串的個數int len[maxn], S[maxn]; // cnt 記錄每個節點表示的回文串出現的次數int last, n, p;int newnode(int l) { // 新建節點for (int i = 0; i < 26; ++i) nex[p][i] = 0;cnt[p] = num[p] = 0;len[p] = l;return p++;}void init() { // 初始化p = 0;newnode(0), newnode(-1); // 新建奇根和偶根last = n = 0;S[n] = -1; fail[0] = 1; // 偶根指向}int get_fail(int x) { // 求failwhile (S[n - len[x] - 1] != S[n]) x = fail[x];return x;}void add(int c) { // 添加節點c -= 'a';S[++n] = c;int cur = get_fail(last);if (!nex[cur][c]) {int now = newnode(len[cur] + 2);fail[now] = nex[get_fail(fail[cur])][c];nex[cur][c] = now;num[now] = num[fail[now]] + 1;}last = nex[cur][c];cnt[last]++;}void count() { // 求cntfor (int i = p - 1; i >= 0; --i) cnt[fail[i]] += cnt[i];} }Tree; char s[maxn]; int main() {ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);scanf("%s", s);Tree.init();int len = strlen(s);s[len] = 26 + 'a';for (int i = 0; i < len; ++i) {Tree.add(s[i]);s[i+len+1] = s[len-i-1];}s[len+len+1] = 0;sam.build(s);long long ans = (sam.getNum() - 1ll * (len+1) * (len+1) + Tree.p - 2) / 2;printf("%lld\n", ans);return 0; }

總結

以上是生活随笔為你收集整理的2019牛客暑期多校训练营(第四场)I - String (后缀自动机+回文树)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色老板av| 日韩午夜精品 | 久久中文字幕电影 | 国语对白一区二区三区 | 亚洲第一国产 | 黄色免费在线网站 | 成年女人毛片 | 国产肥白大熟妇bbbb视频 | 风间由美一区二区 | 午夜激情免费视频 | 天天操天天干视频 | 少妇裸体淫交视频免费看高清 | 国产精品无码免费播放 | www.av色| 国产成人小视频在线观看 | 少妇精品一区 | 国产一区二区黑人欧美xxxx | 热精品| 亚洲AV无码精品黑人黑人 | 久久成年网| 亚洲精品日韩丝袜精品 | 成人久久一区 | 国产一区二区四区 | 亚洲天堂网在线视频 | 亚洲欧洲无码一区二区三区 | 国产丝袜美腿一区二区三区 | 国产88av| 天天透天天干 | 亚洲图片激情小说 | 九九少妇 | www.插插插.com | 中文字幕123区 | 成人免费黄色网址 | 久久99国产精品 | 欧美人人爽 | 57pao国产成永久免费视频 | 国产无遮挡又黄又爽又色视频 | 国内外成人激情视频 | 青青青免费在线视频 | 扒开jk护士狂揉免费 | 制服丝袜在线播放 | 国产高清一区在线观看 | 操她视频网站 | 国语对白 | 在线观看免费的av | 国产男男gay网站 | 国产亚洲欧美日韩精品一区二区三区 | 天天透天天操 | 色妞网| 蜜臀网在线 | 免费看黄色的网站 | 日韩有码在线观看 | 欧美丰满一区二区免费视频 | 免费日批网站 | 日本成人在线免费 | 一区在线播放 | 国产三级福利 | 少妇人妻偷人精品一区二区 | 噜噜色图 | 欧美俄罗斯乱妇 | 在线不卡毛片 | 中文字幕一区二 | 欧美xxxxx自由摘花 | 国产又粗又猛又爽又黄的网站 | 丁香在线 | 禁漫天堂黄漫画无遮挡观看 | 亚洲欧美另类自拍 | 久久夜色精品国产欧美乱 | 亚洲色图35p | 人妻少妇精品中文字幕av蜜桃 | 国产中文字幕亚洲 | 波多野结衣a v在线 欧洲免费av | 玩偶姐姐在线观看免费 | 亚色图 | 国产福利一区二区三区 | а 天堂 在线 | 精品精品精品 | 岛国中文字幕 | 国产色 | 国产成人在线电影 | 超碰人人草人人干 | 欧美在线aa| 激情五月在线 | 中国久久| 亚洲狠狠丁香婷婷综合久久久 | 午夜精品福利在线观看 | 日韩精品视频在线观看网站 | 女同视频网站 | 四虎精品一区二区三区 | 9i在线看片成人免费 | 蜜臀视频一区二区三区 | 日韩日b | www.99热| 国产伦精品一区二区三区视频1 | 熟女一区二区三区四区 | 亚洲国产欧美自拍 | 天天国产视频 | 日韩av综合网站 | 草在线 |