字符串杂题_题解
CF1286E Fedya the Potter Strikes Back
有一个串 S S S 和一个数组 W W W,初始都为空。有 n n n ( 1 ≤ n ≤ 600 000 1\le n\le 600\,000 1≤n≤600000) 次操作,每次在 S S S 后加入字符 c i c_i ci ( c i c_i ci 是小写字母),在 W W W 后加入数 w i w_i wi,并询问所有子段 [ L , R ] [L,R] [L,R] ( 1 ≤ L ≤ R ≤ i 1\le L\le R\le i 1≤L≤R≤i) 的权值和。
子段 [ L , R ] [L,R] [L,R] 的权值定义如下:如果 S [ 1 , R − L + 1 ] = S [ L , R ] S[1,R-L+1]=S[L,R] S[1,R−L+1]=S[L,R] 则权值为 min L ≤ i ≤ R { W i } \min_{L\le i\le R}\{W_i\} minL≤i≤R{Wi},否则为 0 0 0。
强制在线。
题解:队爷写过的,放一个链接
CF1393E2 Twilight and Ancient Scroll (harder version)
给定一个包含 n n n ( 1 ≤ n ≤ 1 0 5 1\le n\le 10^5 1≤n≤105) 个字符串的序列 (总长不超过 1 0 6 10^6 106),求在每个字符串中删除一个字符使得序列字典序不降的方案数。
题解:在串内对删一个点后的串排序,发现两个串同的地方在原串是相邻的,于是就能排序了。然后串之前的大小也可以用类似的方法 c h e c k check check 。于是就能 d p dp dp 了。
CF1252D Find String in a Grid
给定 R × C R\times C R×C ( 1 ≤ R , C ≤ 500 1\le R,C\le 500 1≤R,C≤500) 的字符矩阵,有 Q Q Q ( 1 ≤ Q ≤ 200 000 1\le Q\le 200\,000 1≤Q≤200000) 次询问,每次给定一个字符串 (总长不超过 200 000 200\,000 200000),询问该串在矩阵中以先右后下的方式出现了多少次。
题解 :有两种方法,一种可以暴力把询问串压进 A C AC AC 自动机,然后枚举拐点,把这个拐点最长的串拿进去匹配,减去不合法的个数。另一种可以利用拐点这个性质,给以拐点横着结束,竖着结束的串各自做 S A SA SA ,对询问串枚举拐点,横着合法的是一个区间,竖着合法是一个区间,于是就是二维数点问题了。
CF587F Duff is Mad
给定一个包含 n n n ( 1 ≤ n ≤ 1 0 5 1\le n\le 10^5 1≤n≤105) 个字符串的序列 s i s_i si (总长不超过 1 0 5 10^5 105),有 q q q ( 1 ≤ q ≤ 1 0 5 1\le q\le 10^5 1≤q≤105) 次询问,每次给定 l l l, r r r, k k k,询问 s l , s l + 1 , … , s r s_l,s_{l+1},\ldots,s_r sl,sl+1,…,sr 在 s k s_k sk 中的出现次数之和。
题解:离线,对所有所有串建 A C AC AC 自动机,答案就是在 f a i l fail fail 树上对 s l , . . . , s r s_l,...,s_r sl,...,sr 的结束节点的子树内的所有节点的权值 + 1 +1 +1 后 s k s_k sk 的每个节点的权值之和。 然后根号分治, ∣ s k ∣ |s_k| ∣sk∣ 大的时候就对大的每个 s k s_k sk 分别计算 1 1 1 到 n n n 的串在 s k s_k sk 里出现的次数, O ( n n ) O(n\sqrt n) O(nn) 。 ∣ s k ∣ |s_k| ∣sk∣ 小的时候就做前缀,也是 n \sqrt n n 的。就没啦。
CF547E Mike ans Friends
给定一个包含 n n n ( 1 ≤ n ≤ 2 ⋅ 1 0 5 1\le n\le 2\cdot 10^5 1≤n≤2⋅105) 个字符串的序列 s i s_i si (总长不超过 2 ⋅ 1 0 5 2\cdot 10^5 2⋅105),有 q q q ( 1 ≤ q ≤ 5 ⋅ 1 0 5 1\le q\le 5\cdot 10^5 1≤q≤5⋅105) 次询问,每次给定 l l l, r r r, k k k,询问 s k s_k sk 在 s l , s l + 1 , … , s r s_l,s_{l+1},\ldots,s_r sl,sl+1,…,sr 中的出现次数之和。
题解:建 f a i l fail fail 树,询问离线,从 1 1 1 到 n n n 枚举 i i i ,把 s i s_i si 每个前缀的节点权值 + 1 +1 +1 ,把要询问的询问了。
HDU6661 Acesrc and String Theory
给定字符串 s s s ( 1 ≤ ∣ s ∣ ≤ 1 0 6 1\le |s|\le 10^6 1≤∣s∣≤106) 和整数 k k k ( 1 ≤ k ≤ 20 1\le k\le 20 1≤k≤20),求 s s s 有多少形如 t k t^k tk 的子串。
题解:正解是 S A SA SA ,我用二分+哈希水过的就不讲了。