后缀数组
Sirius_Ren
▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇自己刮~~~
展开
-
hihoCoder 1403 后缀数组 重复旋律
思路: 后缀数组 第一次写 留个模板吧先求出后缀数组,问题转换为询问height数组中连续k-1个数的最小值的最大值,单调队列扫描一遍即可。—yousiki手懒用得STL//By SiriusRen#include <deque>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#def原创 2017-01-15 22:49:35 · 443 阅读 · 0 评论 -
BZOJ 4516 后缀数组+ST+set
写了一半 没了啊啊啊 重新写的 思路: 先不考虑后缀自动机 (我不会啊)那这道题只能用后缀数组了 先把原串倒一下 后缀->前缀 相当于每回在前面加了一个字母 求不同的子串个数 首先 正常的求子串个数我们是会的 SPOJ 705 但是这道题比较坑 它让你每回都输出一下 那只好 维护一个前驱 一个后继 求LCP 取max ans=ans+n-i+1-max(LCP原创 2017-02-01 17:38:30 · 409 阅读 · 0 评论 -
SPOJ 694/705 后缀数组
思路: 论文题*n Σn-sa[k]-ht[k]+1 就是结果 O(n)搞定~//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 55555int cases,n,cntA[N],cntB[N],A[N],B[N],rk[N],sa[N],原创 2017-01-15 23:24:55 · 685 阅读 · 0 评论 -
BZOJ 3796 后缀数组+KMP
思路: 写得我头脑发蒙,,, 旁边还有俩唱歌的 抓狂 (感谢lh大爷查错) 首先 1、w是s1的子串 2、w是s2的子串 这两步很好办啊~ 后缀数组一下O(n)就可以搞 重点是 这个:3、s3不是w的子串 怎么办呢 把 1、3做一发KMP 那么取一下min就好了 注意重叠的情况 (其实是可以O(n)搞的 我一开始写错了 改的时候偷懒就直接二分了) 也很快~//By原创 2017-02-13 11:51:15 · 780 阅读 · 0 评论 -
BZOJ 3230 后缀数组+ST
思路: 首先我们已经会了后缀数组求本质不同的子串个数 这道题跟那个差不多 首先我们可以知道按字典序排好的每个后缀之前包含多少本质不同的字串 就是sigma(n-sa[i]+1-ht[i]+bi[i-1]) 在这上面二分就可以求出来原串是什么了 就把两个后缀的LCP和原串的长度取个min即可 再把串倒过来也差不多这么搞一遍就好啦//By SiriusRen#include <cstdi原创 2017-02-12 21:16:55 · 586 阅读 · 0 评论 -
hihocoder1415 重复旋律3
思路: 扫一遍height 判一下即可//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 200050int n,cntA[N],cntB[N],A[N],B[N],tsa[N],sa[N],rk[N],ht[N],ans;char s[N原创 2017-01-19 08:44:05 · 340 阅读 · 0 评论 -
hihocoder 1407 重复旋律2
思路: 二分一哈答案 height分个块解题方法提示 × 解题方法提示 小Ho:这一次的问题该如何解决呢? 小Hi:嗯,这次的问题被称为最长不可重叠重复子串问题。 小Ho:原创 2017-01-19 08:28:00 · 676 阅读 · 0 评论 -
URAL 1297 后缀数组+线段树
思路: 论文题……*n 倒过来接上 求LCP 搞棵线段树即可//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 5555int cases,pos,maxans,n,cntA[N],cntB[N],A[N],B[N],rk[N],sa[原创 2017-01-15 23:27:15 · 399 阅读 · 0 评论 -
POJ 3693 后缀数组+RMQ
思路: 论文题 后缀数组&RMQ有一些题解写得很繁//By SiriusRen#include <cmath>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 100050int n,cases,cntA[N],cntB[N],A[N],B[N],rk[N],sa原创 2017-01-15 23:19:01 · 308 阅读 · 0 评论 -
POJ 3261 后缀数组+二分
思路: 论文题… 二分+对后缀分组这块一开始不用基数排序 会更快的(其实区别不大)//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 20050int n,k,s[N],cntA[N],cntB[N],A[N],B[N],rk[N],sa[原创 2017-01-15 23:17:23 · 436 阅读 · 0 评论 -
POJ 1743 后缀数组
思路: 后缀数组论文题 对后缀分组//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 20005int n,s[N],cntA[N],cntB[N],A[N],B[N],rk[N],sa[N],tsa[N],ht[N];void SA()原创 2017-01-15 23:02:15 · 385 阅读 · 0 评论 -
BZOJ 3238 后缀数组+单调栈
单调栈跑两遍求出来 ht[i]为最小值的那段区间//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N=500050;int n,cntA[N],cntB[N],A[N],B[N],sa[N],tsa[N],rk[N],ht[N],stka[N原创 2017-03-03 00:03:01 · 344 阅读 · 0 评论