
【数据结构】后缀数组
文章平均质量分 87
cz_xuyixuan
这个作者很懒,什么都没留下…
展开
-
【CodeForces232D】Fence
【题目链接】点击打开链接【思路要点】单独考虑长度为1的询问,显然答案为\(N-1\),否则,我们将原序列和询问序列差分,问题等价于我们需要找到原序列差分后的序列中与询问序列差分后的序列“相等”(这里的“相等”指对应位置互为相反数),且出现位置与询问位置不重合的子串个数。我们可以将原差分序列倍长,对后一半每一项取相反数,并用一个不可见字符连接两端序列,然后求解这个序列的后缀数组,并在询问时在上面二分...原创 2018-03-15 15:20:45 · 282 阅读 · 0 评论 -
【CodeChef】October Challenge 2018 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接**【BBRICKS】**Beautiful Bricks【思路要点】上下两个砖块中,至多有一个黑色。连续的一段存在黑色的行共有两种放置的方案。枚举有几段连续的存在黑色的行,用组合数计算答案。单组数据时间复杂度 O(K)O(K)O(K) 。【代码】#include<bits/stdc++.h>using namespace ...原创 2018-10-21 10:46:08 · 535 阅读 · 0 评论 -
【CodeForces】Manthan, Codefest 18 (Div. 1 + Div. 2) 题解
【比赛链接】 点击打开连接 【题解链接】 点击打开链接 **【A】**Packets 【思路要点】 可以用 1,2,4,...,2i,N−2i+1+11,2,4,...,2i,N−2i+1+11,2,4,...,2^i,N-2^{i+1}+1 构造一组最优的可行方案。 其中 iii 为使得 N−2i+1+1>0N−2i+1...原创 2018-09-05 11:34:15 · 397 阅读 · 0 评论 -
【BZOJ5417】【UOJ395】【NOI2018】你的名字
【题目链接】 BZOJ UOJ 【思路要点】 对 SSS 用后缀自动机建后缀树,并在其 DFSDFSDFS 序上建立主席树。 考虑一个询问 (T,ql,qr)(T,ql,qr)(T,ql,qr) ,从后到前依次考虑其每一个后缀对答案的贡献,显然对于每一个后缀 iii ,存在一个长度 lenlenlen ,当且仅当 j>i+lenj>i+le...原创 2018-09-11 14:04:31 · 669 阅读 · 0 评论 -
【CodeForces319D】Have You Ever Heard About the Word?
【题目链接】 点击打开链接 【思路要点】 一个重要的性质是:当我们发现当前串中不存在长度为iii的repeating block时,长度为iii的repeating block不会再出现。 证明较为简单:上述命题等价于当前串中不存在长度为2i2i2i的repeating block时,我们删去一个长度为2j(j>i)2j(j>i)2j(j>i)...原创 2018-07-01 20:51:17 · 415 阅读 · 0 评论 -
【BZOJ4650】【UOJ219】【NOI2016】优秀的拆分
【题目链接】BZOJUOJ【思路要点】定义前后一半相同的字符串为优秀的字符串,记\(pre_i\)表示以\(i\)结尾的优秀的字符串的个数,\(suf_i\)表示以\(i\)开头的优秀的字符串的个数。则答案为\(\sum_{i=1}^{N-1}pre_i*suf_{i+1}\)。显然\(pre\)和\(suf\)的处理方式类似,考虑如何计算\(pre\)。考虑枚举所求的优秀的字符串长度的一半\(i...原创 2018-05-29 18:19:56 · 289 阅读 · 0 评论 -
【BZOJ4310】跳蚤
【题目链接】点击打开链接【思路要点】补档博客,无题解。【代码】#include<bits/stdc++.h>using namespace std;#define MAXN 100005#define MAXLOG 20#define CSIZE 256template <typename T> void read(T &x) { x = 0; int ...原创 2018-04-24 21:15:15 · 601 阅读 · 0 评论 -
【BZOJ4486】【JSOI2015】串分割
【题目链接】点击打开链接【思路要点】倍长字符串,求出其后缀数组,并保留后缀数组中值在\(N\)以内的元素,这些即是环形字符串后缀排序的结果。答案的位数是已知的,为\(\lfloor\frac{N-1}{K}\rfloor+1\)。从小到大枚举每一个答案,问题转化成能否将字符串从当前位置开始分成至多\(K\)段使得每一段小于当前答案。这个问题显然可以\(O(N)\)贪心,只要使得每次取的字符串在不超...原创 2018-04-18 16:01:26 · 393 阅读 · 0 评论 -
【BZOJ4755】【JSOI2016】扭动的回文串
【题目链接】点击打开链接【思路要点】一定存在一个最长的扭动回文串是从回文中心所在串的某一个极长回文子串开始,一侧向回文中心所在串匹配,另一侧扭向另一个串匹配。因为任意一个扭动的回文串都对应了一个同样长的满足上述要求的扭动的回文串。枚举回文中心,问题转化为了两个字符串的LCP,字符串哈希和后缀结构均可解决。时间复杂度\(O(NLogN)\)。【代码】#include<bits/stdc++.h...原创 2018-04-10 21:02:55 · 322 阅读 · 0 评论 -
【BZOJ4566】【HAOI2016】找相同字符
【题目链接】点击打开链接【思路要点】补档博客,无题解。【代码】#include<bits/stdc++.h>using namespace std;#define MAXN 800005#define MAXC 26struct Suffix_Automaton { int child[MAXN][MAXC]; int father[MAXN], depth[MAXN];...原创 2018-03-27 20:50:40 · 264 阅读 · 0 评论 -
【CodeForces123D】String
【题目链接】点击打开链接【思路要点】用后缀树做就是一道模板题了,官方题解给的做法应该是后缀数组的。时间复杂度\(O(|S|)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 100005;template <typename T> void chkmax(T &x, T y) ...原创 2018-03-14 15:53:23 · 371 阅读 · 0 评论 -
【CodeForces19C】Deletion of Repeats
【题目链接】点击打开链接【思路要点】考虑一个以\(s_i\)结尾的字符串是否可能被当做“repeats”删除,枚举\(s_j=s_i,j>i\),令\(len=j-i\),如果以\(i\)结尾的\(len\)个字符与以\(j\)结尾的\(len\)个字符相同,那么有可能会被当做“repeats”删除。并且,对于每一个\(i\),只有满足条件的最小的\(j\)有意义,其余更大的满足条件的\(j...原创 2018-03-14 13:45:37 · 471 阅读 · 0 评论 -
【CodeForces】CodeForces Round #516 (Div. 1) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Oh Those Palindromes【思路要点】一个字符串是回文串的一个必要条件是该字符串的第一个字符与最后一个字符相同。因此,记字符 xxx 出现的次数为 cntxcnt_xcntx ,一个字符串回文子串个数的上界为 ∑i=az(cnti+12)\sum_{i=a}^{z}\binom{cnt_...原创 2018-10-17 11:27:01 · 318 阅读 · 0 评论