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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hdu 4468 spy 极其精彩的一道kmp灵活运用题

發布時間:2025/4/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 4468 spy 极其精彩的一道kmp灵活运用题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

出的超級好的一道題。至于好在哪里,請思考題目:

題意抽象出來為給定一個字符串r,找出它的一個最短后綴s,使得這個r可以被 s的某前綴+s的某前綴+......+s的某前綴+s本身構造出來。

具體題目描述如下:

“Be subtle! Be subtle! And use your spies for every kind of business. ”?
— Sun Tzu?
“A spy with insufficient ability really sucks”?
— An anonymous general who lost the war?
You, a general, following Sun Tzu’s instruction, make heavy use of spies and agents to gain information secretly in order to win the war (and return home to get married, what a flag you set up). However, the so-called “secret message” brought back by your spy, is in fact encrypted, forcing yourself into making deep study of message encryption employed by your enemy.?
Finally you found how your enemy encrypts message. The original message, namely s, consists of lowercase Latin alphabets. Then the following steps would be taken:?
* Step 1: Let r = s?
* Step 2: Remove r’s suffix (may be empty) whose length is less than length of s and append s to r. More precisely, firstly donate r[1...n], s[1...m], then an integer i is chosen, satisfying i ≤ n, n - i < m, and we make our new r = r[1...i] + s[1...m]. This step might be taken for several times or not be taken at all.?
What your spy brought back is the encrypted message r, you should solve for the minimal possible length of s (which is enough for your tactical actions).

輸入:

There are several test cases.?
For each test case there is a single line containing only one string r (The length of r does not exceed 10?5). You may assume that the input contains no more than 2 × 10?6?characters.?
Input is terminated by EOF.

輸出:

For each test case, output one line “Case X: Y” where X is the test case number (starting from 1) and Y is the desired answer.

樣例:

abc aab abcadabcabcad aaabbbaaaabbbaa abcababcd

樣例答案: Case 1: 3 Case 2: 2 Case 3: 5 Case 4: 6 Case 5: 4


題解:
這題初看很容易只能想到枚舉答案長度i,從r后面截長度為i的后綴然后暴力匹配是否滿足條件。復雜度顯然太高無法接受。
之后如果運用動態規劃的思想,可以對r[1...k]考慮子問題。
但是會發現由于要加一個s本身,考慮完全同質的子問題有點問題。
于是考慮r[1...k]可以表示為s1某前綴+s1某前綴+...+s1某前綴時s1的最短長度
那么對于r[1...k+1],
如果r[k+1]可以成為s1的某前綴的一部分或者自己成為s1的前綴。s1就仍然滿足r[1....k+1]的要求,最短長度不變;
如果不可以,那么理論上把s1的末尾添加字符r[k+1]便滿足了r[1...k+1]的要求。但是這時得考慮下最后得有一個s本身的問題。
所以添加字符的時候不能只加r[k+1],應該加一段字符。從r[1...k+1]中上一次模板串跟r[1..k+1]的一部分完全匹配的地方開始加,加到r[k+1]。
一直掃描完題意給的整個r。最后再給一直維護的模板串加一段:最后一次完全匹配的地方到r的末尾的字符。
以上是思考過程。

以下是更加嚴謹的題解敘述:
從頭開始掃描r,始終維護一個模板串s和上一次完全匹配位置的標記mark:
在r[i]處有三種操作:
1.若在r[i]處成功進行kmp匹配,則模板串不變
2.如匹配失敗,動態添加模板串,添加內容為位置為mark至i的子串
3.如果進行了一次完全匹配,更新mark。

1 #include<cstdio> 2 #include<cstring> 3 #define rep(i,a,b) for(int i=a;i<=b;++i) 4 using namespace std; 5 const int MAXN=110000; 6 char s[MAXN]; 7 char ans[MAXN]; 8 int next[MAXN]; 9 int tot; 10 int main() 11 { 12 //freopen("in.txt","r",stdin); 13 int cnt=0; 14 while(scanf("%s",s)!=EOF) 15 { 16 int len=strlen(s); 17 tot=0; 18 ans[tot++]=s[0]; //將維護的模板串初始化 19 next[0]=0; 20 int mark=0; //mark標記上一次完全匹配的位置 21 for(int i=0,k=0;i<len;++i) 22 { 23 while(k>0&&s[i]!=ans[k]) //嘗試s[i]是否能成為維護的模板串前綴的一部分 24 { 25 k=next[k-1]; 26 } 27 if(s[i]==ans[k]) k++; 28 else if(k==0) //嘗試失敗 29 { 30 for(int j=mark+1;j<=i;++j) //更新模板串 31 { 32 ans[tot++]=s[j]; 33 int tmp=next[tot-2]; //模板串的next數組需要跟著動態更新 34 while(tmp>0&&ans[tmp]!=ans[tot-1]) tmp=next[tmp-1]; 35 if(ans[tmp]==ans[tot-1]) tmp++; 36 next[tot-1]=tmp; 37 } 38 mark=i; 39 } 40 if(k==tot) mark=i,k=next[tot-1]; //進行了一次完全匹配,更新mark,并將k跳回 41 } 42 for(int j=mark+1;j<len;++j) ans[tot++]=s[j]; 43 printf("Case %d: %d\n",++cnt,tot); 44 } 45 return 0; 46 }

?

做出來之后發現這道題考察到了kmp算法的所有操作。但是需要人將其kmp算法的各個操作有機地拆開與重組,來解決這個新的問題。
非常有助于加深對kmp的理解。

轉載于:https://www.cnblogs.com/zhixingr/p/7630181.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的hdu 4468 spy 极其精彩的一道kmp灵活运用题的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 中文字幕99页 | 开心激情综合网 | 欧美一级做a爰片免费视频 成人激情在线观看 | a无一区二区三区 | 毛片一卡二卡 | 亚洲热视频 | 精品国产一区二区不卡 | jizz欧美| 一个色综合导航 | 超碰888| 少妇闺蜜换浪荡h肉辣文 | 亚洲五码在线 | 久久久久人妻一区精品色欧美 | 欧美女优一区 | 91av视频在线 | 在线视频97 | 国产毛片电影 | 超碰免费在线 | 亚洲老老头同性老头交j | 天天碰天天操 | av一区在线播放 | 美国免费黄色片 | youjizz.com国产| 本田岬av| 欧美一级片网站 | 久久99久久98精品免观看软件 | 亚洲av成人精品毛片 | 成人视品 | 天狂传说之巴啦啦小魔仙 | 动漫美女被吸奶 | 干干干操操操 | 一级片一区 | 淫综合网 | 打屁股黄文 | 天天操天天插天天射 | 手机在线毛片 | 国产毛片网 | 国产综合精品久久久久成人影 | 1769国产| 欧美黄色三级 | 亚洲黄色小说视频 | 无码 人妻 在线 视频 | www.成人av| 韩日一级片| www性| 国产自偷自拍 | 国产xx视频 | 国产成人激情视频 | 丝袜美腿亚洲综合 | 美女一区| 欧美日韩亚洲成人 | 亚洲AV无码久久精品色三人行 | 牛牛影视一区二区 | 91久久综合亚洲鲁鲁五月天 | 国产精品福利在线观看 | 成人综合色站 | 久久久久亚洲无码 | 国产极品美女高潮无套嗷嗷叫酒店 | 蜜臀少妇久久久久久久高潮 | 国产精品一区二区毛片 | 亚洲av无码乱码在线观看富二代 | 久久99精品久久久久久水蜜桃 | 男女操操视频 | 日韩性高潮 | 精品国产一区二区三区日日嗨 | 岛国大片在线观看 | 日本美女性生活视频 | 黄色美女一级片 | 啪啪网站大全 | 日韩国产欧美视频 | 中文字幕在线观看不卡 | 黄色一级片网站 | 日本边添边摸边做边爱 | 欧美日韩视频在线观看免费 | av免费毛片 | 成人免费观看视频网站 | 午夜视频在线免费看 | 加勒比视频在线观看 | free性满足hd国产精品久 | 波多野结av衣东京热无码专区 | 亚洲一区中文字幕永久在线 | 婷婷四月 | 朝桐光av一区二区三区 | 亚洲巨乳| 夜夜摸夜夜操 | 亚洲污片 | 一区二区三区免费看视频 | 日本在线视频观看 | 午夜少妇久久久久久久久 | 日日夜夜撸啊撸 | 精品不卡一区二区 | 狼人伊人干 | 中文字幕精品国产 | 在线天堂在线 | 中国黄色片子 | 黄色wwwww | 午夜精品一区二区三区在线观看 | 国产在线一二三区 | 欧美色视频一区二区三区 |