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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Codeforce-126B:Password(KMP模板题)

發布時間:2024/3/26 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforce-126B:Password(KMP模板题) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


題目鏈接:點擊打開鏈接


題目大意:

給你一個串,讓你求這個串的一個同時是前綴,后綴(這個說法好像不太對)且在串中出現過的最長子串。

舉個例子:

對于串 fixprefixsdfix 就應該輸出fix.


解題思路:

首先這個串同時是前綴和后綴,那么自然就想到了kmp算法中的next數組。因為next數組的值正好符合題目最長要求。但是同時要求這個串在整個串中間出現過,那就暴力枚舉一發即可,將所有可能的長度都枚舉一遍,這時候我們就發現,你每次枚舉的長度其實是用next數組在跳躍的,具體還是要理解清楚next數組的性質。

其次要說明一點就是,這個串可以部分與前綴和后綴重合但不能完全重合(這不廢話嘛),例如 papapapap 答案是 papap 。就在kmp模板里稍微改一下即可。

以下貼代碼,



#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <vector> #include <queue> #include <map> #include <algorithm> #include <stack> #include <set> #include <functional> #define rank ra #define next ne #define pb push_back #define hash haha #define lson rt<<1 #define rson rt<<1|1 #define xlson xl,xmid,xt<<1 #define xrson xmid+1,xr,xt<<1|1 #define ylson yl,ymid,xt,yt<<1 #define yrson ymid+1,yr,xt,yt<<1|1 using namespace std; typedef long long ll; char a[1000005]; char t[1000005]; int next[1000005]; int ans,n; void get_next(char a[]) {int l=strlen(a);int i=0;int j=-1;next[0]=-1;while(i<l){if(j==-1||a[i]==a[j]){i++;j++;next[i]=j;}elsej=next[j];} } int kmp(char s[],char t[]) //kmp模板 {int ls=strlen(s);int lt=strlen(t);int j=0;int i=0;get_next(s);while(i<lt&&j<ls){if(j==-1||s[j]==t[i]){i++;j++;if(j==ls&&i==j) //匹配成功但是是前綴繼續匹配j=next[j];}elsej=next[j];}if(j==ls&&i!=lt) //匹配成功且不是后綴return 1;return 0; } int main() {while(scanf(" %s",a)!=EOF){get_next(a);int l=strlen(a);int k=next[l];ans=0;for(int i=k;i>=0;i=next[i]) //枚舉所有可能長度{for(int j=0;j<i;j++)t[j]=a[j];t[i]='\0';if(kmp(t,a)){ans=i;break;}}if(ans==0)printf("Just a legend\n");else{for(int i=0;i<ans;i++)printf("%c",a[i]);printf("\n");}} }

總結

以上是生活随笔為你收集整理的Codeforce-126B:Password(KMP模板题)的全部內容,希望文章能夠幫你解決所遇到的問題。

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