HDU 1358 Period KMP計算週期

2022-09-17 23:54:15 字數 601 閱讀 6166

題目大意:給你一串字串,判斷字串的字首是否由某些字串多次重複而構成。

也就是,從第1個字母到第2字母組成的字串可由某一週期性的字串(「a」)

的兩次組成,也就是aa有兩個a組成;

第三行自然就是aabaab可有兩個aab組成;

第四行aabaabaab可由三個aab組成;

第五行aabaabaabaab可由四個aab組成。

解題思路:同hdu 3746類似,通過計算字串字首的迴圈節獲得相應週期即可。

**:

1 #include2 #include3 #include4 #include5

using

namespace

std;

6const

int n=1e6+5;7

8intm;9

intnxt[n];

10char

p[n];

1112

void

getnext()20}

2122

intmain()

34 printf("\n"

);35}36

return0;

37 }

KMP求重複字串 HDU1358

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

HDU1358KMP求迴圈節

直接說結論吧,kmp演算法的前提是預處理乙個next陣列 乙個字串長度為len,那麼這個字串的最小迴圈節就是len nxt len 因此有 判斷乙個字串是否完全迴圈可以用 len len nxt len 0,並且nxt len 0該題中詢問的是在末尾補上幾個字串可以使字串完全迴圈,那麼就用最小迴圈節...

HDU1358 Period 題解 KMP演算法

題目大意 給你乙個長度為 n 的字串 s 那麼它有 n 個字首。對於第 i 個字首 t 如果他們表示成乙個子串重複 k 次 k 1 那麼我們就輸出這個字首 t 的長度以及對應的最大的 k 因為對於 aaaa 來說,k 可以為 4 或者 2 但是 4 比較大,所以選擇 k 題目分析 考察 next 函...