poj 字首中的週期

2021-08-07 19:35:10 字數 574 閱讀 8060

題目:字首中的週期

用nex陣列來表示字串每個字元i的特徵數,即p(0...i-1)中最大的相同字首子串和字尾子串。

對於有i個字元的字串p,有迴圈節的充分必要條件應該是i%(i-nex[i-1)=0,並且迴圈節的個數為i/(i-nex[i-1])。

**如下:

#include#include#include#include#include#include#include#includeusing namespace std;

int nex[1000010];

char a[1000010];

void init_next(int len)

if(a[i]==a[k]) nex[i]=k+1;

else nex[i]=0;

}}int main(){

int len;

int cnt=1;

while(cin>>len && len){

cin>>a;

init_next(len);

printf("test case #%d\n",cnt++);

for(int i=1;i

POJ2406 KMP字首週期

題意 給你乙個字串,長度小於1百萬,問你他最多可以拆成集合相同字串,例如abcabcabc 可以拆成3個abc,所以輸出3.思路 這個是比較常規的next應用,首先假設當前字串長度n 那麼 n next n 字首為最短子串長度,如果n next n 0 n n next n 0,說明最後乙個字串是長...

Openjudge 字首中的週期

運用kmp中的next陣列。字首中如果有週期的話,一定滿足,next i i next i 0.滿足這個條件時 記字串s的第i位之前的子串為p,其字首字串位為p.pre,字尾字串為p.suf,以p i,j 表示p的從i位到j 1的字串。則i就是p的長度,next i 就是p.pre和p.suf的長度...

字首中的週期 非優化KMP演算法的運用

總時間限制 3000ms 記憶體限制 65536kb 描述 乙個字串的字首是從第乙個字元開始的連續若干個字元,例如 abaab 共有5個字首,分別是a,ab,aba,abaa,abaab。我們希望知道乙個n位字串s的字首是否具有迴圈節。換言之,對於每乙個從頭開始的長度為 i i 大於1 的字首,是否...