hdu 4300(kmp或者拓展kmp)

2022-07-19 14:15:24 字數 1072 閱讀 6897

題意:亂七八糟說了一大堆,就是先給你乙個長度26的字串,對應了abcd....xyz,這是乙個密碼表。然後給你乙個字串,這個字串是不完整的(完整的應該是前半部分是加密的,後半部分是解密了的),然而,給你的字串一定是加密的部分+一部分解密的部分(可以是全部,也可以是沒有),讓你求出最短的完整字串;

解題思路:考慮給出的字串加密部分一定全部給出,所以,給出的字串的一半一定是加密的,所以把這一半先轉換好,然後和字尾比一下,求最長的公共字首,用kmp和拓展kmp都行;

拓展kmp(這裡要注意下,如果用這個,那麼一定公共字首一定要等於字尾,也就是next[i]+i>len)

#include#include#include#include#include#define maxn 100500

using namespace std;

char t[maxn];

char word[maxn];

char ans[maxn];

char s[maxn];

int _next[maxn];

int tlen;

void get_next()

int len=strlen(t);

for(int i=0;i=tlen)

maxx=max(maxx,_next[i]);

}//cout#include#include#include#include#include#define maxn 100500

using namespace std;

char t[maxn];

char ans[maxn];

char word[maxn];

char s[maxn];

int next1[maxn];

int tlen;

void get_next()

int len=strlen(t);

for(int i=0;itlen/2)

maxx=tlen/2;

int slen=tlen-maxx;

for(int i=0;icout

}

HDU 1711 裸KMP,附KMP模板

pattern為模板串,從0下標,長度為len。返回next陣列 templatevoid kmp pre t pattern,int len,int next text為匹配串,lent為其長度。pattern為模板串,lenp為其長度,next為上面得到的next陣列。返回乙個vector,表示...

hdu4333 擴充套件kmp

題意 給定乙個數字 10 100000,一次將該數的第一位放到放到最後一位,求所有組成的不同的數比原數小的個數,相等的個數,大的個數 分析 由於輸入的數太大了,只能當作字串處理,將輸入的原串貼上在後面,這樣就可以對原串進行ekmp,最終只要統計從第i個位置開始的extend i 如果 len則從第i...

hdu4763 擴充套件kmp

題意是在乙個字串中找出乙個字首乙個字尾和乙個中間的子串,互相不重疊並且三部分完全一樣 運用的是exkmp 對自身求乙個next陣列 next i 表示以i為開始位置的子串與整個串的字首最長匹配到多少長度 然後就是列舉了 注意到我們列舉後三分一的位置時,如果某個位置為i,且next i i len。也...