將輸入的原字串s[1…n]和自身做concatenation 得到t[1…2n]=s[1]s[2]…s[n]s[1]s[2]…s[n]我們要找一個1≤i≤n使得t[i…2n]是t[1…2n],t[2…2n],…,t[n…2n]中字典序第K小的這可以透過對t做suffix array (SA)得到只要在O(n)時間建立好SA 這題應該都能在5秒內跑完我的SAIS演算法跑了1.3秒 初音島IIIDC3演算法跑了3.9秒
使用doubling建立SA 時間複雜度是O(nlogn) 經過測試確定在ZJ上無法在30秒內跑完另外 雖然我沒有測試suffix tree的建立時間 因為它的時間複雜度是O(|Σ|n)(其中Σ為字元集) 應該也是會TLE的
由於坊間(?)要用到SA的題目 大多用O(nlogn)的演算法便綽綽有餘 決定放這題上來如果有人有SA以外的做法也歡迎提出