1. 程式人生 > 其它 >「題集」精緻的袖珍題目-2022 年度

「題集」精緻的袖珍題目-2022 年度

不要問為什麼會分年度,問就是編輯器快要爆炸了。

「LG P1393」Mivik 的標題

題目連結:洛谷


\(L=|S|\),設 \(s\) 為所謂名字的字串。

前半部分算是非常套路。設 \(f_k\) 表示隨機生成一個長度為 \(k\) 的字串後,它的一個字尾為 \(s\),且 \(s\) 為第一次出現的概率。

不難發現答案就是 \(\sum_{k=1}^{n}f_k\)。這個狀態的轉移也是套路的容斥,也就是去容斥“第一次出現”。我們首先要保證沒有 \(s\) 的結尾位置落在 \([1,k-L]\) 之間,那麼此時任意組合的概率就是 \((1-\sum_{j=1}^{k-L}f_j)\times m^{-L}\)

接著對於結尾在 \((k-L,k)\)

\(s\) 進行容斥,對於每一種不合法的情況,我們在第一次重複出現 \(s\) 的位置那裡容斥掉它。前面已經保證了在 \(k-L\) 之前不會有 \(s\) 結尾,因此之前的貢獻可以用 \(f\) 計算。假設相交的長度為 \(l\),則貢獻應當為 \(-f_{k-L+l}\times m^{-L+l}\),並且還需要滿足 \(s[1:l]\)\(s\) 的一個 Border。

現在其實已經可以將問題寫成多項式形式並使用半線上卷積計算答案了。不過,我們可以將 Border 劃分為 \(O(\log L)\) 個等差數列,這樣每個等差數列中的 \(-f_{k-L+l}\times m^{-L+l}\)

可以直接字首和維護,最終只需要維護 \(O(\log L)\) 組字首和即可優化轉移。

小結:

  1. 注意這類問題的通用 DP 形式
  2. 注意使用等差性質優化轉移的思想