题目解析: 对于本题主要的核心是对于一个指令字符串如“RURUU”,如果我们假设它的终点坐标为(8,8),其实只要统计指令字符串中的R的个数和U的个数(对于我给出的例子而言,num_R == 2,num_U == 3),显然不管我们是否能到达终点,这条指令至少要走不止一遍才有可能,那么我们只要将它在 ...
分类:
其他好文 时间:
2019-10-02 10:53:22
阅读次数:
117
大意: 给定串$s,t$, 给定整数$x$, 求判断$t$是否能划分为至多$x$段, 使这些段在$s$中按顺序,不交叉的出现. 设$dp_{i,j}$表示$s$匹配到$i$位, 划分了$j$段, 匹配到$t$中的最大位置 每次取一个极长的lcp转移即可, lcp可以二分哈希或者用后缀数组+RMQ求 ...
分类:
编程语言 时间:
2019-10-01 11:49:06
阅读次数:
69
题意: 给你S串和T串,用T串的所有前缀去匹配S串(匹配值是最长公共子串)。 问你总值相加是多少。 思路: 先把两个S,T串倒过来,再拼接 S#T 合成一串,跑一下后缀数组 在排序好的rank里计算每个T后缀的最长匹配长度。(前后两个for即可) 最后dp对后缀取max,累计答案。(因为后缀从pos ...
分类:
编程语言 时间:
2019-09-21 15:24:46
阅读次数:
161
题意:给定字符串S,A,B。现在让你对S进行切割,使得每个切割出来的部分在[A,B]范围内,问方案数。 思路:有方程,dp[i]=Σ dp[j] (S[j+1,i]在合法范围内)。 假设M和N的最长公共前缀为长度是LCP,那么字符串M>=字符串N的条件是 LCP=|N|或者(LCP<|N|&&M[l ...
分类:
编程语言 时间:
2019-08-31 21:20:05
阅读次数:
78
题意 给定两个字符串,求长度大于等于k的公共子串数。 分析 将两个字符串中间加个特殊字符拼接,跑后缀数组。 将题目转化为对每一个后缀求$\sum_{j=1}^{i 1}lcp(i,j)$,且后缀$i$和$j$属于不同字符串。 由于$lcp$只跟$h$数组的区间最小值有关,因此对于单调递减的$h[i] ...
分类:
其他好文 时间:
2019-08-25 21:36:42
阅读次数:
102
【定义】 【LCP】全名最长公共前缀,两个后缀之间的最长前缀,以下我们定义 lcp ( i , j ) 的意义是后缀 i 和 j 的最长前缀 【z函数】 函数z [ i ] 表示的是,第 i 个后缀和字符串的最长前缀 【解决问题】 这两个算法都是在解决这个问题 即求后缀和字符串和后缀之间的最长公共前 ...
分类:
编程语言 时间:
2019-08-25 19:56:02
阅读次数:
121
题意:给你一个长度为n的字符串,有m次询问,每次询问l到r的子串在原串中第k次出现的位置,如果没有输出-1。n, m均为1e5级别。 思路:后悔没学后缀数组QAQ,其实只要学过后缀数组这个题还是比较好想的。这个问题可以转化为有多少个后缀和后缀l的lcp长度大于等于r - l + 1。我们知道,在后缀 ...
分类:
其他好文 时间:
2019-08-25 12:18:57
阅读次数:
263
题意:给你一个长度为n的字符串,有q个询问,每次询问一个子串s(l,r)第k次出现的位置,若子串出现次数少于k次输出 1. 解题思路:先把SA跑出来,然后对于每次询问可以由l和rank[]找到l在所有后缀中的排名,再用两次二分求出使得LCP(L,R)包含s(l,r)的最大区间[L,R],LCP可以借 ...
分类:
编程语言 时间:
2019-08-24 00:01:25
阅读次数:
89
8.1省选组A 先通过题解方法求出“活跃点”,然后离散化进行贪心匹配。每次匹配时如果当前点被占领,则尝试把占领当前点的点往后挤 8.1省选组B 先按照lcp的关系进行构树,然后在树上进行dp求出sg值。需要进行子树异或和优化。 8.1省选组C 发现程序效率瓶颈在于一个点向一段bfs序连续的节点连边。 ...
分类:
其他好文 时间:
2019-08-07 16:10:14
阅读次数:
94
神奇的思路,还是要学习一个。 题意:给你一个字符串,并定义两个前缀的lcs、两个后缀的lcp,求式子膜$2^{64}$的值。 $$ \sum_{1\le i$,咱将它们的lcs、lcp拼起来,可知 $$ s[i lcs(i,j)+1,i+lcp(i,j) 1]=s[j lcs(i,j)+1,j+lc ...
分类:
其他好文 时间:
2019-07-13 10:46:13
阅读次数:
97