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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

BZOJ 2806 Luogu P4022 [CTSC2012]Cheat (广义后缀自动机、DP、二分、单调队列)

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ 2806 Luogu P4022 [CTSC2012]Cheat (广义后缀自动机、DP、二分、单调队列) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=2806
(luogu) https://www.luogu.org/problemnew/show/P4022

題解:對“作文庫”中的串建廣義SAM。(感覺加個#拼在一起直接SAM也行啊,只是常數大了點,但是大家都寫的廣義SAM我也就跟著寫廣義SAM了233333)

詢問時二分\(L\), 變成求最少幾個位置不匹配。然后DP方程是\(dp[i]=\min(dp[i-1]+1,\min_{i-match[i]\le j\le i-L} dp[j])\). 其中\(match[j]\)表示以\(j\)結尾最長能匹配的子串長度,用后綴自動機求出。單調隊列優化即可。

應該a[i]-=96我寫成a[i]-=48; dp完了之后不更新ans; 二分分反……我是有多無腦

注意一個問題是,由于這里有\(mid\)的限制,只有\(\le i-mid\)的位置才能被放進單調隊列, 不可以一上來就把\(0\)放進去!

代碼

#include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std;const int N = 1.1e6; const int S = 2; int son[(N<<1)+3][S+1]; int fa[(N<<1)+3]; int len[(N<<1)+3]; char a[N+3]; char b[N+3]; int match[N+3]; int dp[N+3]; int dq[N+3]; int n,m,siz,rtn,lstpos;void initSAM() {siz = rtn = lstpos = 1; }void insertchar(char ch) {int p = lstpos,np; siz++; np = lstpos = siz; len[np] = len[p]+1;for(; p && son[p][ch]==0; p=fa[p]) {son[p][ch] = np;}if(!p) {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;}}} }int main() {initSAM();scanf("%d%d",&n,&m);for(int i=1; i<=m; i++){lstpos = rtn;scanf("%s",a+1); int lena = strlen(a+1);for(int j=1; j<=lena; j++) {insertchar(a[j]-48);}}for(int i=1; i<=n; i++){scanf("%s",a+1); int lena = strlen(a+1);for(int j=1; j<=lena; j++) {a[j]-=48;}int u = rtn,cur = 0;for(int j=1; j<=lena; j++){while(u && son[u][a[j]]==0) {u = fa[u]; cur = len[u];}if(son[u][a[j]]) {u = son[u][a[j]]; cur++;}else {u = rtn; cur = 0;}match[j] = cur;}int left = 0,right = lena,mid,ans;while(left<right){mid = (left+right+1)>>1;dp[0] = 0; int head = 1,tail = 0;if(mid<=1) {tail++; dq[tail] = 0;}for(int j=1; j<=lena; j++){dp[j] = dp[j-1]+1;while(head<=tail && dq[head]<j-match[j]) {dq[head] = 0; head++;}if(head<=tail){dp[j] = min(dp[j],dp[dq[head]]);}if(j-mid+1>=0){while(head<=tail && dp[dq[tail]]>=dp[j-mid+1]) {dq[tail] = 0; tail--;}tail++; dq[tail] = j-mid+1;}}ans = dp[lena];if(ans*10<=lena) {left = mid;}else {right = mid-1;}}printf("%d\n",left);}return 0; }

總結

以上是生活随笔為你收集整理的BZOJ 2806 Luogu P4022 [CTSC2012]Cheat (广义后缀自动机、DP、二分、单调队列)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲综合小说 | 四虎音影 | 91精品91久久久中77777老牛 | 欧美aaaaaaaaaa| 亚洲精品一区二区三区在线观看 | 日本大尺度吃奶做爰久久久绯色 | 欧美黄色大片免费看 | 丁香九月激情 | 五月天av影院 | 色网站免费在线观看 | 欧美成人免费在线观看视频 | 欧美成视频| 亚洲一区二区三区视频在线 | 在线观看污网站 | 日韩一区二区在线观看视频 | 国产freexxxx性播放麻豆 | 97在线超碰 | 精品欧美一区二区精品久久 | 在线观看欧美一区二区 | 99久久免费看精品国产一区 | 久久久精品毛片 | 亚洲一区 中文字幕 | 蜜臀久久99精品久久久无需会员 | 亚洲精品一区二区三区在线 | 最近中文字幕在线中文视频 | 久久精品国产精品亚洲 | 91禁在线看 | 成人国产毛片 | 亚洲av日韩av永久无码下载 | 欧美成人短视频 | 亚洲成人免费在线观看 | 爆乳熟妇一区二区三区霸乳 | 亚洲视频观看 | 动漫美女揉胸 | 中文字幕乱码人妻无码久久95 | 亚洲欧美激情精品一区二区 | 午夜精品久久久内射近拍高清 | 国产高潮又爽又无遮挡又免费 | 亚洲一区二区激情 | 开元在线观看视频国语 | 艳妇臀荡乳欲伦交换电影 | 亚洲性图第一页 | 99精品欧美一区二区蜜桃免费 | 在线免费观看高清视频 | 久久精品国产欧美亚洲人人爽 | 公侵犯人妻中文字慕一区二区 | 一级aaa毛片 | 91麻豆精品一二三区在线 | 欧美视频导航 | 国产男男一区二区三区 | 成人一区二区免费视频 | 日韩欧美中文字幕一区 | 中文字字幕一区二区三区四区五区 | 亚洲精品在线免费播放 | 丁香花电影在线观看免费高清 | 国产伦精品一区二区三区免费视频 | 原创真实夫妻啪啪av | 欧美精品成人在线 | 日韩在线观看免费av | 国产精品视频久久久久 | 欧美黄色a | 538国产精品一区二区免费视频 | 瑟瑟综合网| 性色av免费观看 | 91极品尤物 | av合集| 亚洲精品另类 | 久久久噜噜噜久久 | 欧美日韩在线直播 | 日本一级黄 | 欧美bbbbbbbbbbbb18av| 18禁一区二区 | 亚洲图片三区 | 欧美三级三级三级爽爽爽 | 插我一区二区在线观看 | 免费20分钟超爽视频 | 自拍偷拍一区 | 精品人妻一区二区三区蜜桃 | jizz黑人| 亚洲欧美日韩在线不卡 | 久久久在线观看 | wwwwww国产| 青青草社区视频 | www.五月婷| 打开免费观看视频在线播放 | 日本激情视频网站 | 理论片高清免费理伦片 | 啪啪无遮挡 | 欧美不在线 | 91麻豆蜜桃一区二区三区 | 午夜偷拍福利视频 | 欧美国产精品一区二区三区 | 色老头一区二区三区 | 亚洲一区二区三区免费看 | 成人男女视频 | 超碰h| 成人午夜视频一区二区播放 | 少妇视频一区二区三区 | 免费禁漫天堂a3d |