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})),直接暴力找到所有出现位置就好做了。

原文地址:https://www.cnblogs.com/hfccccccccccccc/p/10220054.html