題意:問在乙個字串末尾加上多少個字元能使得這的字串首尾相連後能夠迴圈
題解:就是利用next的性質求最小迴圈節
kmp求最下迴圈節
ans=len-next[len];ans就是最小迴圈節長度證明看那個部落格。
然後就簡單了。
#include #include #include using namespace std;const int m = 1e5 + 10;
char s[m];
int next[m];
void getnext()
}int main()
else
}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 如果不能,說明還需要再新增幾個字...
HDU3746 (KMP)字串最小迴圈節問題
傳送門 題意 給你乙個串,要你在串頭或尾新增最少的字元,使得該串至少有2個迴圈節,問你最少需要加幾個字元.如 aaa 迴圈為 a 已有3個迴圈節 abca 迴圈節為abc 至少在末尾加 bc 使得該串至少有2個迴圈節 abcde 迴圈節為abcde 至少在末尾加 abcde 使得該串至少有2個迴圈節...
kmp找最小迴圈節,hdu3746
字串的長度為len 最小迴圈節的長度l len next len 需要補齊的字元個數r l len l 這個題沒啥大的問題,就是輸入很奇怪,如果用cin,getline 會錯,用scanf s s 就對了 include include include include include include...