原文链接https://www.cnblogs.com/zhouzhendong/p/9240665.html 题目传送门 - BZOJ2534 题意 有一种形如 $uvu$ 形式的字符串,其中 $u$ 是非空字符串,且 $V$ 的长度正好为 $L$ ,那么称这个字符串为 $L-Gap$ 字符串. 给出一个字符串 $S$ ,以及一个正整数 $L$ ,问 $S$ 中有多少个 $L-Gap$ 子串. $L< |S|\leq 5\times 10^4$ 题解 我甚至怀疑写这题题解是否必要…… 这题和B…
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ4556.html 题目传送门 - BZOJ4556 题意 给定一个长度为 $n$ 的字符串 $s$ . 有 $m$ 次询问,每次询问的格式为 $a,b,c,d$ ,问 $s[c\cdots d]$ 与 $\underline {s[a\cdots b]}$ 的所有子串 的 LCP 的最大值是多少. $n,m\leq 10^5$ 题解 首先,我们对于每一个询问考虑二分答案.显然答案的上下界分别是 $0$…
原文链接http://www.cnblogs.com/zhouzhendong/p/9026543.html 题目传送门 - BZOJ3172 题意 输入$n(n\leq 200)$个字符串,保证长度总和$\leq 10^6$. 对于每一个字符串,求它在所有的$n$个字符串(包括它自己)中出现了几次.(同一个字符串内可能出现多次当前的字符串) 题解 听百度说这题可以用AC自动机?? 然而我顺手大力$SA$干掉了此题. 本题用$SA$做好像很容易. 首先,把输入的字符串连接成一个字符串,不同的单词…
原文链接http://www.cnblogs.com/zhouzhendong/p/9025092.html 题目传送门 - UOJ#219 (推荐,题面清晰) 题目传送门 - BZOJ4650 题意 如果一个字符串可以被拆分为AABB的形式,其中AA和BB是任意非空字符串,则我们称该字符串的这种拆分是优秀的. 现在给出一个长度为n的字符串S,我们需要求出,在它所有子串的所有拆分方式中,优秀拆分的总个数.这里的子串是指字符串中连续的一段. 多组数据,数据组数$\leq 10,n\leq 3000…
Solution 1: 后缀数组暴力大法好 #include <map> #include <cmath> #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define F(i,j,k) for (int i=j;i<=k;++i)…
题意:给你两个串s,p,问你把s分开顺序不变,能不能用最多k段合成p. 题解:dp[i][j]表示s到了前i项,用了j段的最多能合成p的前缀是哪里,那么转移就是两种,\(dp[i+1][j]=dp[i][j],dp[i+lcp][j+1]=dp[i][j]+lcp\),这里的lcp是dp[i][j]和i的lcp,然后sa预处理一下st表就行了 //#pragma GCC optimize(2) //#pragma GCC optimize(3) //#pragma GCC optimize(4)…
总是犯低级错误,st表都能写错-- 正反分别做一遍SA,预处理st表方便查询lcp,然后处理a[i]表示前i个后缀一共有多少个本质不同的子串,这里的子串是按字典序的,所以询问的时候直接在a上二分排名就能得到询问区间,然后用正反st表查lcp即可 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N=200005; int n,q,b[N],sa1[…
原文链接http://www.cnblogs.com/zhouzhendong/p/9033092.html 题目传送门 - BZOJ3230 题意 给定字符串$s$.长度为$n$. 现在有$Q$组询问,每组询问内容如下: 两个正整数$i,j$. 设$s_i,s_j$分别表示$s$的所有本质不同的子串中字典序第$i$小和第$j$小的子串. 请你输出$|lcp(s_i,s_j)|^2+|lcs(s_i,s_j)|^2$. 如果不存在$s_i$或者$s_j$,则输出$-1$. $n,Q\leq 10…
原文链接https://www.cnblogs.com/zhouzhendong/p/9069171.html 题目传送门 - BZOJ2119 题意 给定一个股票连续$n$个时间点的价位,问有多少段股票走势在间隔$m$单位时间之后重现? $n\leq 5\times 10^4,m\leq 10$ 题解 和 http://www.cnblogs.com/zhouzhendong/p/9025092.html 此题十分类似. 这里稍微讲讲本题的不同之处. 首先相邻值求差,转换成字符串匹配. 然后,…
题意 一个长为 \(n\) 的字符串 \(s\),和 \(m\) 个询问.每次询问有 \(4\) 个参数分别为 \(a,b,c,d\). 要你告诉它 \(s[a...b]\) 中的所有子串 和 \(s[c...d]\) 的 最长公共前缀 \((\mathrm{LCP})\) 的最大值. \((1\le n,m\le 10^5, a\le b,c\le d,1\le a,b,c,d\le n)\) 题解 一开始看错了题 以为是 \([a,b]\) 中所有子串 和 \([c,d]\) 中所有子串的…