kmp找最小迴圈節,hdu3746

2021-09-25 16:48:43 字數 426 閱讀 7130

字串的長度為len

最小迴圈節的長度l=len-next[len]

需要補齊的字元個數r=l-len%l

這個題沒啥大的問題,就是輸入很奇怪,如果用cin,getline()會錯,用scanf("%s",s)就對了

#include#include#include#include#include#include#include#include#includeusing namespace std;

int next[100005],n;//注意next陣列的大小

char s[100005],a[1000005];

void getnext()

else j=next[j];

}}int main()

}return 0;

}

HDU3746 KMP 最小迴圈節

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

HDU 6740 kmp最小迴圈節

題意 給乙個無線迴圈小數的前幾位,給n,m 選擇其中一種出現在前幾位的迴圈節方式 a個數 迴圈節的長度b 使得n a m b最大 樣例 2 1 12.1212 輸出 6 選擇2,2 1 1 1 1 選擇12,2 4 2 1 6 選擇21,2 3 2 1 4 選擇212,2 3 3 1 3 選擇121...

hdu3746(kmp最小迴圈節)

題意 問在乙個字串末尾加上多少個字元能使得這的字串首尾相連後能夠迴圈 題解 就是利用next的性質求最小迴圈節 kmp求最下迴圈節 ans len next len ans就是最小迴圈節長度證明看那個部落格。然後就簡單了。include include include using namespace...