HDU1358KMP求迴圈節

2021-10-08 02:09:34 字數 961 閱讀 2627

直接說結論吧,kmp演算法的前提是預處理乙個next陣列

,乙個字串長度為len,那麼這個字串的最小迴圈節就是len-nxt[len]

因此有:

判斷乙個字串是否完全迴圈可以用(len%(len-nxt[len]))==0,並且nxt[len]!=0該題中詢問的是在末尾補上幾個字串可以使字串完全迴圈,那麼就用最小迴圈節(len-nxt[len])- 最末尾多餘的字元個數(nxt[len]%最小迴圈節)即可

ac**:

/*

* @author: hesorchen

* @date: 2020-07-03 17:05:01

* @lastedittime: 2020-07-12 17:06:22

* @description:

*/#include

using

namespace std;

#define ios \

ios::sync_with_stdio(false); \

cin.tie(0); \

cout.tie(0);

#define fre \

#define ll long long

ll nxt[

100010];

char a[

100010];

void

get_nxt()

}int

main()

return0;

}

參考資料

kmp演算法 —— next 陣列的應用 — 字首中最小迴圈節,最大重複次數

kmp求最小迴圈節

kmp最小迴圈節 迴圈週期 定理 假設s的長度為len,則s存在最小迴圈節,迴圈節的長度l為len next len 子串為s 0 len next len 1 1 如果len可以被len next len 整除,則表明字串s可以完全由迴圈節迴圈組成,迴圈週期t len l。2 如果不能,說明還需要...

kmp求最小迴圈節

kmp最小迴圈節 迴圈週期 定理 假設s的長度為len,則s存在最小迴圈節,迴圈節的長度l為len next len 子串為s 0 len next len 1 1 如果len可以被len next len 整除,則表明字串s可以完全由迴圈節迴圈組成。迴圈週期t len l。2 如果不能,說明還需要...

KMP求重複字串 HDU1358

這個題目蠻有意思的,大家都說用到了什麼kmp的靈魂 next陣列的應用,可是也沒見哪個人給我來個很正式的數學推導。到最後也只是看到了乙個部落格上寫的是由觀察得來的結論 其實也就是乙個規律性的東西,就是你利用next陣列以及長度為i的字首可以得出乙個滿足重複的條件 i i next i 0 i i n...