next陣列 迴圈節

2021-10-25 02:37:09 字數 1096 閱讀 5503

又是熱血沸騰的寫了一發kmp,看完題目,蹦出個迴圈節,emmm…

結論:

設len=n−nxt[n]

(新理解:其實就是重疊的那個部分嚶嚶嚶

(1) nxt[n]=0 不存在迴圈節

(2) nxt[n]>0 && n%len≠0 存在迴圈節但是長度不整除

(3) nxt[n]>0 && n%len=0 存在整除迴圈節

而且更長的迴圈節一定是len的倍數。

題目點我

題目意思呢就是給你乙個字串,求這個字串到第i個字元為止的迴圈節的次數。

比如aabaabaabaab,長度為12.到第二個a時,a出現2次,輸出2.到第二個b時,aab出現了2次,輸出2.到第三個b時,aab出現3次,輸出3.到第四個b時,aab出現4次,輸出4.

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define pb push_back

using

namespace std;

typedef

long

long ll;

const

int inf =

0x3f3f3f3f

;const ll inf =

0x3f3f3f3f3f3f3f3f

;#define pq priority_queue

int n;

const

int maxn =

1e6+5;

char s[maxn]

;int next[maxn]

;void

get_next

(char s)

else

j = next[j];}

}int

main()

}printf

("\n");

}return0;

}

KMP演算法 next陣列的應用 迴圈節問題

先來個next陣列模板 void next int i 0,j 1 next 0 1 while i 1 i next i 是最小迴圈節的長度 2 字串的迴圈條件是i i next i 0 next i 0 3 最小迴圈節的迴圈次數是i i next i 4 整體 在 字串 s l strlen s...

NEXT陣列與字串最小迴圈節

結論 通過next陣列,可以得到字串的最小迴圈節。設字串s的結尾下標為i,next i j,如果 left j ne0 i i j 0 end right.成立,那麼s j 1,i 就是字串的最小迴圈節。簡要說明 1 x j y i 設s x,j s j,i 由於s 1,j s y,i 並且 s 1...

迴圈節長度以及迴圈節

迴圈節長度 兩個整數做除法,有時會產生迴圈小數,其迴圈部分稱為 迴圈節。比如,11 13 6 0.846153846153 其迴圈節為 846153 共有6位。這是一道藍橋杯的題目,試卷上是乙個填空題,思路就是不斷的對除數取餘,然後乘10後再取餘,直到餘數在之前出現過或者為0 結束。為什麼是這樣的呢...