hdu4333 擴充套件kmp演算法

2021-07-04 19:38:31 字數 719 閱讀 8065

原題鏈結

思路比較簡單。把原串擴大一倍,然後以原串為模板串,用擴充套件kmp演算法求出每個位置的最大字首即可。(wa了一天了,也不知道改了哪個地方就對了…………)

#include#include#define maxl1000100

using namespace std;

char s1[maxl*2],s2[maxl*2];

intlen,pre[maxl],temp;

void getpre(char*s)

temp=len%(len-pre[len])==0?len/(len-pre[len]):1;

s[len]='\0';

}void getst()

getpre(s1);

for(int i=len;i<2*len;i++)s2[i]=s1[i-len];

s2[2*len]='\0';

}int f[maxl];

void getf(char*s,int*f)

int k=1;

for(int i=2;i<=len;i++)

}

}int ex[maxl];

void exkmp(char*t,char*p)

int k=1;

for(int i=2;i}

}int main()

return

0;}

hdu4333 擴充套件kmp

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

Hdu 4333(擴充套件KMP)

2014 12 17 01 34 48 思路 仔細思考,發現如果用擴充套件kmp,求出每個位置到末尾的最大字首匹配長度,比如1 100,位置50能匹配到75,那麼當我們把50 100移動到開頭。前25個字元是一樣的,需要比較的是第26個字元 也就是移動前的第76個字元 所以如果設next i 為位置...

擴充套件KMP演算法

擴充套件kmp 求出a i.lena 1 與b的最長公共字首長度,記為ex i 或者說,ex i 為滿足a i.i z 1 b 0.z 1 的最大的z值 擴充套件kmp可以用來解決很多字串問題,如求乙個字串的最長回文子串和最長重複子串。演算法 設next i 為滿足b i.i z 1 b 0.z 1...