乙個字串的字首是從第乙個字元開始的連續若干個字元,例如」abaab」共有5個字首,分別是a, ab, aba, abaa, abaab。
我們希望知道乙個n位字串s的字首是否具有迴圈節。
換言之,對於每乙個從頭開始的長度為 i (i>1)的字首,是否由重複出現的子串a組成,即 aaa…a (a重複出現k次,k>1)。
如果存在,請找出最短的迴圈節對應的k值(也就是這個字首串的所有可能重複節中,最大的k值)。
輸入格式
輸入包括多組測試資料,每組測試資料報括兩行。
第一行輸入字串s的長度n。
第二行輸入字串s。
輸入資料以只包括乙個0的行作為結尾。
輸出格式
對於每組測試資料,第一行輸出 「test case #」 和測試資料的編號。
接下來的每一行,輸出具有迴圈節的字首的長度i和其對應k,中間用乙個空格隔開。
字首長度需要公升序排列。
在每組測試資料的最後輸出乙個空行。
資料範圍
2≤n≤1000000
輸入樣例:
3aaa
4abcd
12aabaabaabaab
0輸出樣例:
test case #1
2 23 3
test case #2
test case #3
2 26 2
9 312 4
題意:輸入乙個字串,輸出以i為結尾的字串有幾個最長迴圈節,1不用輸出。
由於kmp的性質,i-next[i]就是最長迴圈節的長度,只要能整除就是存在。
using
namespace std;
const
int n=
1000010
;char str[n]
;int n,next[n]
;void
get_next()
}int
main()
puts
(「」);}
return0;
}
習題3 4 週期串
如果乙個字串可以由某個長度為k的字串重複多次得到,我們說該串以k為週期。例如,abcabcabcabc以3為週期 注意,它也以6和12為週期 輸入乙個長度不超過80的串,輸出它的最小週期。樣例輸入 hohoho 樣例輸出 2 include include 列舉法 intmain if ok 找到週...
第二週期總結
算數運算子 求餘 3 2 1 7 4 3 數字帶有負號 7 4 3 7 4 3 2.遞增和遞減 遞增1 遞減1 i 和 i 運算順序 放前面要先運算 再取a的值 放後面 先取a的值在運算 3.邏輯運算子 邏輯與 短路與 a b 並列關係 兩個都返回true 才返回true 如果a為false 則b表...
16周 期末總結
時光荏苒,不知不覺已經過去了乙個學期。這乙個學期,真的非常感謝賀老師,賀老師讓我們接觸到了新的學習方式 翻轉課堂,在這樣的教學方式下,我們對資料結構進行了一次有趣的學習之旅。現在依稀還能記得第一堂課的樣子,那是第一次接觸翻轉課堂,賀老師在講台上面給我們講怎麼來實現翻轉課堂,其實當時還是一頭霧水,但是...