演算法競賽高階指南 週期 KMP

2021-09-25 20:48:00 字數 972 閱讀 2679

題目

乙個字串的字首是從第乙個字元開始的連續若干個字元,例如」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

輸入樣例:

3

aaa4

abcd

12aabaabaabaab

0

輸出樣例:
test case #1

2 23 3

test case #2

test case #3

2 26 2

9 312 4

分析:

**

#include #include #include using namespace std;

const int n=1000000;

int next[n];

char str[n];

int n;

void get_next()

cout<} return 0;

}

《演算法競賽高階指南》 防曬

有c頭奶牛進行日光浴,第i頭奶牛需要minspf i 到maxspf i 單位強度之間的陽光。每頭奶牛在日光浴前必須塗防曬霜,防曬霜有l種,塗上第i種之後,身體接收到的陽光強度就會穩定為spf i 第i種防曬霜有cover i 瓶。求最多可以滿足多少頭奶牛進行日光浴。輸入格式 第一行輸入整數c和l。...

《演算法競賽高階指南》蚯蚓

蛐蛐國最近蚯蚓成災了!隔壁跳蚤國的跳蚤也拿蚯蚓們沒辦法,蛐蛐國王只好去請神刀手來幫他們消滅蚯蚓。蛐蛐國裡現在共有 n 只蚯蚓,第 i 只蚯蚓的長度為 ai 所有蚯蚓的長度都是非負整數,即可能存在長度為0的蚯蚓。每一秒,神刀手會在所有的蚯蚓中,準確地找到最長的那乙隻,將其切成兩段。若有多隻最長的,則任...

演算法競賽高階指南筆記

原碼 原碼就是符號位加上真值的絕對值,即用第一位表示符號,其餘位表示值.比如如果是8位二進位制 其中,第一位為1是負數 1 0000 0001 原 1 1000 0001 原 因此,8位二進位制數的取值範圍 127,127 補碼正數的補碼是其本身 負數的補碼是在其原碼的基礎上,符號位不變,其餘各位取...