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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

BZOJ 3277 串 BZOJ 3473 字符串 (广义后缀自动机、时间复杂度分析)

發布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ 3277 串 BZOJ 3473 字符串 (广义后缀自动机、时间复杂度分析) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

標簽那么長是因為做法太多了。。。

題目鏈接: (bzoj 3277) https://www.lydsy.com/JudgeOnline/problem.php?id=3277

(bzoj 3473) https://www.lydsy.com/JudgeOnline/problem.php?id=3473

題解:

先講三個做法公共部分: 建出廣義SAM,然后對于每個點求出它在多少字符串中出現過。

做法一

把每個字符串在廣義SAM上暴力跑。每跑到一個點就暴力沿著fail樹往上跳,標記跳過的點,直到跳到已標記的點為止(每個串要換用不同的標記)。

時間復雜度\(O(L\sqrt L)\) (\(n\)為串的個數,\(L\)為總長度)

寫一下時間復雜度分析: (我自己想的,很有可能是錯的,有錯懇請大佬指出!!感謝)

假設某個字符串長度為\(x\), 則最壞情況下它一直在往深處走,并且每一步都沒有碰到已經跳過的點,這種情況下其走的步數是\(\sum^{x}_{i=1}i=O(x^2)\).

但是它還要受到另一個限制,就是走的步數不超過SAM總大小\(O(L)\). 因此其對時間復雜度貢獻為\(O(\min(x^2),L)\).

計算最壞情況下的時間復雜度,也就是已知\(\sum^{m}_{i=1} x_i=L\), 求\(\sum^{m}_{i=1} \min(x_i^2,L)\)的最大值。顯然當\(x_i>\sqrt L\)時是沒有任何意義的(白白浪費代價,價值不增加),所以就是已知\(\sum^{m}_{i=1} x_i=L\)且對于任意\(i\)\(i\le \sqrt L\), 求\(\sum^{m}_{i=1} x_i^2\)的最大值。由函數的凹凸性知顯然(或者也可以用偏導數解釋,如果你愿意的話。。。)所有串長均為\(\sqrt L\)時目標函數最大,為\(O(L\sqrt L)\).

做法二

類似于BZOJ2754/BZOJ2780, 就是個數顏色問題,每個點開個set記錄經過這個點的所有串,然后沿著Parent樹自下而上啟發式合并。時間復雜度\(O(n\log^2n)\).

線段樹合并貌似可以做到\(O(n\log n)\)?

做法三

依然是數顏色,可以使用DFS序+主席樹等各種神奇做法解決。時間復雜度\(O(n\log^2n)\) (?)

代碼

做法一

#include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<vector> #define llong long long using namespace std;const int N = 4e5; const int S = 26; struct SAM {int id[N+3];int fa[N+3];int son[N+3][S+3];int len[N+3];int sz[N+3];int buc[N+3];int oid[N+3];int cnt[N+3];int cid[N+3];int mx[N+3];int siz,rtn,lstpos;void init() {id[0] = siz = rtn = lstpos = 1;}int insertstr(char ch){int p = lstpos,np; siz++; np = lstpos = siz; len[np] = len[p]+1; sz[np] = 1;for(; p && son[p][ch]==0; p=fa[p]) {son[p][ch] = np;}if(p==0) fa[np] = rtn;else{int q = son[p][ch];if(len[q]==len[p]+1) {fa[np] = q;}else{siz++; int nq = siz; len[nq] = len[p]+1;memcpy(son[nq],son[q],sizeof(son[q]));fa[nq] = fa[q]; fa[np] = fa[q] = nq;for(; p && son[p][ch]==q; p=fa[p]) {son[p][ch] = nq;}}}return np;}void getsort(){for(int i=1; i<=siz; i++) buc[len[i]]++;for(int i=1; i<=siz; i++) buc[i] += buc[i-1];for(int i=siz; i>=1; i--) oid[buc[len[i]]--] = i;} } sam; vector<char> str[N+3]; char a[N+3]; int n,m;int main() {scanf("%d%d",&n,&m);sam.init();for(int i=1; i<=n; i++){scanf("%s",a+1);sam.lstpos = 1;int lena = strlen(a+1);for(int j=1; j<=lena; j++) {sam.insertstr(a[j]-96); str[i].push_back(a[j]);}} // for(int i=1; i<=sam.siz; i++) for(int j=1; j<=S; j++) if(sam.son[i][j]) printf("trans%d %d %d\n",i,j,sam.son[i][j]); // for(int i=1; i<=sam.siz; i++) printf("i%d len%d fa%d\n",i,sam.len[i],sam.fa[i]);sam.getsort();for(int i=1; i<=n; i++){int pos = sam.rtn;for(int j=0; j<str[i].size(); j++){pos = sam.son[pos][str[i][j]-96];int tmp = pos;for(; tmp && sam.cid[tmp]!=i; tmp=sam.fa[tmp]) {sam.cnt[tmp]++; sam.cid[tmp] = i;}}}sam.cnt[1] = 0;for(int i=1; i<=sam.siz; i++){int u = sam.oid[i];sam.mx[u] = sam.mx[sam.fa[u]]+(sam.cnt[u]>=m ? sam.len[u]-sam.len[sam.fa[u]] : 0); // printf("%d mx%d\n",u,sam.mx[u]);}for(int i=1; i<=n; i++){int pos = sam.rtn; llong ans = 0ll;for(int j=0; j<str[i].size(); j++){pos = sam.son[pos][str[i][j]-96];ans += (llong)sam.mx[pos]; // putchar(str[i][j]); printf("pos%d\n",pos); puts("");}printf("%lld ",ans);}return 0; }

總結

以上是生活随笔為你收集整理的BZOJ 3277 串 BZOJ 3473 字符串 (广义后缀自动机、时间复杂度分析)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 永久免费不卡在线观看黄网站 | 亚洲人在线观看视频 | 久久久线视频 10 | 少妇精品偷拍高潮白浆 | 亚洲一区偷拍 | 中文在线天堂网 | 污视频大全 | 森泽佳奈在线播放 | 久久66热这里只有精品 | 三上悠亚痴汉电车 | 中文婷婷 | 欧美天天性影院 | 亚洲精品视频91 | 在线播放一级片 | 日本aⅴ在线观看 | av人人干| a在线免费观看 | 97人妻精品一区二区三区视频 | 蜜桃在线一区二区 | 中文字幕在线资源 | 免费欧美一级片 | 伊人网国产 | 日韩aⅴ视频 | 欧美大黑b| 91网站免费 | 天天澡天天狠天天天做 | 日韩乱码视频 | 亚洲天堂男人网 | 51ⅴ精品国产91久久久久久 | 黄色片网站在线免费观看 | 91视频综合网 | 一区二区三区免费在线观看视频 | 婷婷色中文 | 色屁屁草草影院ccyycom | 欧美日韩一区在线 | 精品久久久视频 | 老司机一区二区三区 | 香蕉毛片 | 亚洲精品一区二区潘金莲 | 亚洲免费不卡视频 | 久久精品一区二区 | 欧美在线视频网站 | 日韩免费观看一区二区三区 | 久草91| xxx毛片 | 妺妺窝人体色www在线下载 | 国产精品23p | 2019天天操 | 国产91白丝在一线播放 | 538国产精品一区二区 | 亚洲永久精品在线观看 | 在线天堂在线 | 波多野结衣在线 | 黄色18网站| 妺妺窝人体色www聚色窝仙踪 | 欧美一级久久久 | 一卡二卡三卡四卡 | 久久久久xxxx| 久久久久一区二区精码av少妇 | 国产一区二区三区成人 | 国产电影一区二区三区 | 91在线色 | 日本成人久久 | 国产乱人乱偷精品视频 | 国产视频一二三四区 | 日韩无| 成人国产网站 | 欧美做受高潮 | 日本美女毛片 | 久久综合狠狠 | 久草不卡 | 色婷婷一区 | 久久免费国产 | 国产美女免费观看 | 国产又爽又黄又嫩又猛又粗 | 日日弄天天弄美女bbbb | 51av在线 | 秋霞久久精品 | 国产一区免费 | 亚洲专区在线播放 | 欧洲美女与动交ccoo | 久久男人的天堂 | 夜夜草网站 | av在线麻豆| 欧美日韩久久久久久 | 日本一区二区三区免费电影 | 亚洲美女影院 | av中文字幕一区二区三区 | 日本中文一区 | 污污视频免费看 | 在线视频免费观看一区 | 在线观看黄色av | 国产肥白大熟妇bbbb视频 | 午夜福利啪啪片 | 青青国产精品 | 精品伦精品一区二区三区视频密桃 | 日韩在线小视频 | free黑人多人性派对hd | 国产免费黄色大片 |