1. 程式人生 > >[JSOI2016]無界單詞[動態規劃、kmp]

[JSOI2016]無界單詞[動態規劃、kmp]

left 單詞 由於 貢獻 ext line loj 統計 枚舉

題意

題目鏈接

分析

  • 對於第一問,枚舉最終串最小的相同前後綴來統計答案。

  • 由於最小的相同前後綴也是無界單詞,所以可以考慮先求解子問題。

  • 定義狀態 \(f(i)\) 表示長度為 \(i\) 的串中有多少個是無界單詞。

  • 補集轉化後容易得到:

    \[f_i=2^i-\sum\limits_{i=1}^{\left\lfloor\frac{i}{2}\right\rfloor}f_j\times2^{i-2j}?\]

  • 對於第二問,按位確定答案。每次在前 \(len\) 位確定的情況下重新算 \(f\)

    • 如果 \(i\le len\) :此時求出 \(next\) 數組判斷。
    • 否則,如果 \(j>len\)
      : 正常判斷。
    • 如果 \(j \le len\)\(len\le n - j\) : 貢獻為 \(f_j\times 2^{i-len-j}\)
    • 如果 \(j\le len\)\(len > n - j\):要滿足 \(s[1\cdots len-i+j]=s[i-j+1\cdots len]\)\(f_j\) 為1。

代碼

代碼鏈接

[JSOI2016]無界單詞[動態規劃、kmp]