1. 程式人生 > >CF963D Frequency of String

CF963D Frequency of String

https://codeforces.com/problemset/problem/123/D

題目大意

給一個字串 \(s\),每次詢問一個字串 \(m_i\) 和一個正整數 \(k_i\),問 \(s\) 中包含了 \(k_i\)\(m_i\) 的子串的長度最小值。

每次詢問的 \(m_i\) 兩兩不同。

解法

考慮一下詢問的字串的出現次數。

如果有多個長度相同的 \(m_i\),那麼他們的最多出現次數之和是 \(O(|s|)\) 的。因此考慮最壞的情況,即詢問的 \(m_i\) 長度兩兩不同。

\(M = \sum{|m_i|}\),那麼最多隻有 \(\sqrt{M}\) 種不同的長度,因此所有 \(m_i\)

的出現次數之和為 \(O(|s|\sqrt{M})\),直接暴力找到所有出現位置就好做了。