http://codeforces.com/contest/963/problem/D
Description
给出一个字符串S
n次询问,每次询问给出正整数k和字符串m
要求字符串T的最小长度,满足T是S的子串,且m在T中出现了至少K次
n,|S|,∑|m|≤100000
n
,
|
S
|
,
∑
|
m
|
≤
100000
保证询问的串互不相同
Solution
一开始看到这题就想SAM然后fail树上乱搞
然后就搞不出来。。
事实上可以暴力
令
M=∑|m|
M
=
∑
|
m
|
首先询问串的长度种类数最多只有
M−−√
M
种
最坏就是
1,2,3,4,....x
1
,
2
,
3
,
4
,
.
.
.
.
x
,
x(x+1)2=M
x
(
x
+
1
)
2
=
M
,x是根号M级别的
每个长度的所有串在|S|中出现次数之和是|S|级别的
因此所有询问串在|S|中出现次数之和是
|S|M−−√
|
S
|
M
的
这样就可以暴力了
用AC自动机先把所有出现的位置弄出来
Fail树上乱搞一波,直接扫一扫就好了