题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2119 就是找差分序列上中间差 m 的相等的两段. 考虑枚举这样一段的长度 L .可以把序列分成 \( \frac{n}{L} \) 段:令 L , 2L , ... 这样的位置为关键点,那么每个关键点 i 求一下 LCP( i , i+L+m ) 和 LCS( i , i+L+m ) ,就能知道过这个关键点的左端点的合法范围.用 lst 记录上一个关键点算出的右端点来去重即可. 这样是 n…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4650 https://www.luogu.org/problemnew/show/P1117 和 bzoj2119 股市的预测 一样. 考虑算出每个点往前的 AA 的个数和往后的 BB 的个数,每个点作为 AA 和 BB 分界点的答案累加起来就行. 算一个点开始的 AA 的个数,就是枚举 A 的长度 L ,然后每 L 个分为一段,在段的开头求 LCP 和 LCS ,给合法的位置区间加1就行…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2119 思路就是对于这个形如 ABA 的串,枚举 A 的长度,并按照长度分出几块,找到一些关键点就是块的开头: 那么每一种 ABA 的串,A 的部分一定覆盖了一个关键点: 所以找关键点周围的匹配长度算答案,具体就是找和对应位置的 lcp + lcs,那么 ABA 可以在对应匹配的地方滑动,就能找到所有 ABA 了: 因为是差分数组所以 n-1,而且注意连接正反串的字符要比串内字符小,不是 '…
2119: 股市的预测 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 331  Solved: 153[Submit][Status][Discuss] Description 墨墨的妈妈热爱炒股,她要求墨墨为她编写一个软件,预测某只股票未来的走势.股票折线图是研究股票的必备工具,它通过一张时间与股票的价位的函数图像清晰地展示了股票的走势情况.经过长时间的观测,墨墨发现很多股票都有如下的规律:之前的走势很可能在短时间内重现!如图可以看到这只股票A…
2119: 股市的预测 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 434  Solved: 200[Submit][Status][Discuss] Description 墨墨的妈妈热爱炒股,她要求墨墨为她编写一个软件,预测某只股票未来的走势.股票折线图是研究股票的必备工具,它通过一张时间与股票的价位的函数图像清晰地展示了股票的走势情况.经过长时间的观测,墨墨发现很多股票都有如下的规律:之前的走势很可能在短时间内重现!如图可以看到这只股票A…
Description 墨墨的妈妈热爱炒股,她要求墨墨为她编写一个软件,预测某只股票未来的走势.股票折线图是研究股票的必备工具,它通过一张时间与股票的价位的函数图像清晰地展示了股票的走势情况.经过长时间的观测,墨墨发现很多股票都有如下的规律:之前的走势很可能在短时间内重现!如图可以看到这只股票A部分的股价和C部分的股价的走势如出一辙.通过这个观测,墨墨认为他可能找到了一个预测股票未来走势的方法.进一步的研究可是难住了墨墨,他本想试图统计B部分的长度与发生这种情况的概率关系,不过由于数据量过于庞大…
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2119 题解: 这个题很好的. 首先把序列转化为差分序列,问题转化为找到合法的子序列,使得去除最中间的 M长度,剩下的头尾完全相同. 枚举重现的长度 len,然后在序列中每len个长度打一个标记,不难发现,如题所述的A部分一定只包含一个标记点.然后枚举每个被标记的点 i,得到对应的 j=i+len+M,然后求出 i和 j 向前向后可匹配的最大长度 L,R那么对答案的贡献即为 max(0,(m…
题目大意:求一个字符串中形如$ABA$的串的数量,其中$B$的长度是给定的 有点像[NOI2016]优秀的拆分这道题 先对序列打差分,然后离散,再正反跑$SA$,跑出$st$表 进入正题 $ABA$串有一个神奇的性质 令$A$串长度是$x$ 如果我们选取了一个位置$i$,再选取一个位置$i+x+m$ 用预处理的$st$表,求出经过它们的,最长的相同子串的起始位置$s$和结束位置$e$ 合法的$ABA$串似乎在$[s,e]$之间滑动 有了这个性质,我们再外层枚举长度$x$,在序列中找出一些相隔为$…
首先要差分+离散化. 然后就是求形如ABA的串有多少,其中B的长度确定为k. 我们用到了设置关键点的思想.我们枚举A的长度L.然后在\(1,1+L,1+L*2,1+L*3...\)设置关键点.然后我们枚举这些关键点,试图求出跨过这个关键点的长度为L的在B左边的A有多少个. 可以证明这样可以做到不重不漏,因为A的长度为L至少跨过一个关键点. 然后这个点的贡献就怎么算?我们先处理出后缀数组.然后对枚举的关键点i和i+L+k求LCP和LCS.贡献就是(min(LCP,L)+min(LCS,L)-1)-…
转博客大法好 自己画一画看一看,就会体会到这个设置关键点的强大之处了. CODE(sa) O(nlogn)→1436msO(nlogn)\to 1436msO(nlogn)→1436ms #include <bits/stdc++.h> using namespace std; typedef long long LL; template<class T>inline void read(T &num) { register char ch; register int fl…