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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[BZOJ4698][SDOI2008]Sandy的卡片(后缀自动机)

發布時間:2023/12/13 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [BZOJ4698][SDOI2008]Sandy的卡片(后缀自动机) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

差分之后就是求多串LCS。

對其中一個串建SAM,然后把其它串放在上面跑。

對SAM上的每個狀態都用f[x]記錄這個狀態與當前串的最長匹配長度,res[x]是對每次的f[x]取最小值。答案就是res[]的最大值。

考慮f[x]的求法,把s[]放在SAM上跑時,若下一個能正常匹配(即son[x][c]!=0)則直接len++,否則用經典的跳父親,找到第一個son[k][c]!=0的點k,len=mx[k]+1,x=son[k][c]。
每次更新最終匹配到的狀態的f[]。同時注意到出現次數可以向父親傳遞,于是Radixsort之后經典DP轉移最長長度即可。

1 #include<map> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #define rep(i,l,r) for (int i=(l); i<=(r); i++) 6 typedef long long ll; 7 using namespace std; 8 9 const int N=500010; 10 int n,m,x,len,fir,lst=1,cnt=1,ans,res[N],s[N],f[N],mx[N],fa[N],c[N],q[N]; 11 map<int,int>son[N]; 12 13 void ext(int c){ 14 int p=lst,np=lst=++cnt; mx[np]=mx[p]+1; 15 while (p && !son[p][c]) son[p][c]=np,p=fa[p]; 16 if (!p) fa[np]=1; 17 else{ 18 int q=son[p][c]; 19 if (mx[q]==mx[p]+1) fa[np]=q; 20 else{ 21 int nq=++cnt; mx[nq]=mx[p]+1; son[nq]=son[q]; 22 while (p && son[p][c]==q) son[p][c]=nq,p=fa[p]; 23 fa[nq]=fa[q]; fa[q]=fa[np]=nq; 24 } 25 } 26 } 27 28 void Radix(){ 29 rep(i,1,cnt) c[mx[i]]++; 30 rep(i,1,cnt) c[i]+=c[i-1]; 31 for (int i=cnt; i; i--) q[c[mx[i]]--]=i; 32 rep(i,1,cnt) res[i]=mx[i]; 33 } 34 35 void Go(int s[],int n){ 36 int x=1,len=0; 37 rep(i,1,n){ 38 int c=s[i]; 39 if (son[x][c]) x=son[x][c],f[x]=max(f[x],++len); 40 else{ 41 while (x && !son[x][c]) x=fa[x]; 42 if (!x) x=1,len=0; else len=mx[x]+1,x=son[x][c],f[x]=max(f[x],len); 43 } 44 } 45 for (int i=cnt; i; i--){ 46 int x=q[i]; res[x]=min(res[x],f[x]); 47 if (f[x] && fa[x]) f[fa[x]]=mx[fa[x]]; 48 f[x]=0; 49 } 50 } 51 52 int main(){ 53 scanf("%d%d%d",&n,&len,&fir); 54 rep(i,1,len-1) scanf("%d",&x),s[i]=x-fir,fir=x; 55 len--; rep(i,1,len) ext(s[i]); 56 Radix(); 57 rep(i,2,n){ 58 scanf("%d%d",&len,&fir); 59 rep(i,1,len-1) scanf("%d",&x),s[i]=x-fir,fir=x; 60 len--; Go(s,len); 61 } 62 rep(i,2,cnt) ans=max(ans,res[i]); 63 printf("%d\n",ans+1); 64 return 0; 65 }

?

?

轉載于:https://www.cnblogs.com/HocRiser/p/9441117.html

總結

以上是生活随笔為你收集整理的[BZOJ4698][SDOI2008]Sandy的卡片(后缀自动机)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: a男人天堂 | 国产精品久久久久久久av福利 | 天天看天天操 | 不卡av电影在线 | 国产又黄又粗又长 | 海角社区id | 国产综合在线播放 | 精品欧美日韩 | 欧美日韩视频在线观看一区 | 在线观看小视频 | 娇妻玩4p被三个男人伺候电影 | 花房姑娘免费全集 | 人人草网站 | 干爹你真棒插曲mv在线观看 | 女儿的朋友5中汉字晋通话 欧美成人免费高清视频 | 国产高清www | 日本美女黄视频 | 国产日韩欧美自拍 | 国产精品久久精品 | 久久精品10 | 国产免费一区二区三区四区五区 | 极品一区 | 西野翔之公侵犯中文字幕 | 同性色老头性xxxx老头 | 欧美在线观看www | 九九这里只有精品视频 | 亚洲欧美日韩偷拍 | 久草免费在线视频观看 | 黄色天堂网站 | 网友自拍av | 欧美不卡一区二区三区 | 久久精品第一页 | 成人三级电影网站 | 欧美色精品在线 | 精品国产亚洲一区二区麻豆 | 亚洲一区二区自拍 | 青青国产视频 | 欧美日韩国产精品一区二区三区 | 久久久久久久久久久综合 | 亚洲综合二区 | 午夜激情网址 | 干干天天 | 永久免费汤不热视频 | 国产精品成人99一区无码 | 一区二区三区高清不卡 | 久操热| 日韩免费成人av | 久久精品性 | 一边摸内裤一边吻胸 | 亚洲成av人片在www色猫咪 | 中文字幕日韩人妻在线视频 | 六月婷婷中文字幕 | 亚洲福利电影网 | 玖玖爱资源站 | 伊甸园精品区 | 大胸奶汁乳流奶水出来h | 一区二区三区精品久久久 | 国产尻逼视频 | 狠狠干天天干 | 国产精品推荐 | 天天干,天天操 | 涩里番在线观看 | 精品久久久久久久久久久久久久 | 亚洲色图综合在线 | 色在线免费观看 | 国产做受视频 | 亚洲色图图片 | 黄色图片小说 | 国产色婷婷 | 一区不卡视频 | 国产精品人成在线观看免费 | 人妻体内射精一区二区 | 无码久久精品国产亚洲av影片 | 日韩成人免费电影 | 日韩福利一区 | 亚洲精品91在线 | 18禁超污无遮挡无码免费游戏 | 一本大道av伊人久久综合 | 精品区一区二区 | 91在线观看欧美日韩 | 一本到免费视频 | 国产盗摄视频在线观看 | 精品人妻午夜一区二区三区四区 | 久草网址| 黄色免费在线网站 | 国产精品主播一区二区 | 亚洲人网| 中文字幕日韩三级片 | 本庄优花番号 | 黄色综合网站 | 色在线免费观看 | 日韩欧美亚洲综合 | 国产午夜大地久久 | 色偷偷资源 | 日本激情一区二区 | 久久精品无码一区二区三区毛片 | 性久久久久 | 四虎影视成人永久免费观看亚洲欧美 | 欧美亚洲一区二区三区四区 |