后缀数组:

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<vector>
  5. using namespace std;
  6. typedef long long ll;
  7. const int N=2e5+,mod=;
  8. char s[N];
  9. int sa[N],buf1[N],buf2[N],c[N],n,n1,n2,rnk[N],ht[N],ST[N][],Log[N];
  10. void Sort(int* x,int* y,int m) {
  11. for(int i=; i<m; ++i)c[i]=;
  12. for(int i=; i<n; ++i)++c[x[i]];
  13. for(int i=; i<m; ++i)c[i]+=c[i-];
  14. for(int i=n-; i>=; --i)sa[--c[x[y[i]]]]=y[i];
  15. }
  16. void da(char* s,int n,int m=) {
  17. int *x=buf1,*y=buf2;
  18. x[n]=y[n]=-;
  19. for(int i=; i<n; ++i)x[i]=s[i],y[i]=i;
  20. Sort(x,y,m);
  21. for(int k=; k<n; k<<=) {
  22. int p=;
  23. for(int i=n-k; i<n; ++i)y[p++]=i;
  24. for(int i=; i<n; ++i)if(sa[i]>=k)y[p++]=sa[i]-k;
  25. Sort(x,y,m),p=,y[sa[]]=;
  26. for(int i=; i<n; ++i)y[sa[i]]=x[sa[i-]]==x[sa[i]]&&x[sa[i-]+k]==x[sa[i]+k]?p-:p++;
  27. if(p==n)break;
  28. swap(x,y),m=p;
  29. }
  30. }
  31. void getht() {
  32. for(int i=; i<n; ++i)rnk[sa[i]]=i;
  33. ht[]=;
  34. for(int i=,k=; i<n; ++i) {
  35. if(k)--k;
  36. if(!rnk[i])continue;
  37. for(; s[i+k]==s[sa[rnk[i]-]+k]; ++k);
  38. ht[rnk[i]]=k;
  39. }
  40. }
  41. void initST() {
  42. for(int i=; i<n; ++i)ST[i][]=ht[i];
  43. for(int j=; (<<j)<=n; ++j)
  44. for(int i=; i+(<<j)-<n; ++i)
  45. ST[i][j]=min(ST[i][j-],ST[i+(<<(j-))][j-]);
  46. }
  47. int lcp(int l,int r) {
  48. if(l==r)return n-sa[l];
  49. if(l>r)swap(l,r);
  50. l++;
  51. int k=Log[r-l+];
  52. return min(ST[l][k],ST[r-(<<k)+][k]);
  53. }
  54. int main() {
  55. Log[]=-;
  56. for(int i=; i<N; ++i)Log[i]=Log[i>>]+;
  57. scanf("%s",s),n1=strlen(s),s[n1]='|',scanf("%s",s+n1+),n=strlen(s);
  58. da(s,n),getht(),initST();
  59. vector<int> v1,v2;
  60. for(int i=; i<n1; ++i)v1.push_back(rnk[i]);
  61. for(int i=n1+; i<n; ++i)v2.push_back(rnk[i]);
  62. sort(v1.begin(),v1.end());
  63. sort(v2.begin(),v2.end());
  64. int ans=;
  65. for(int i=,j=; i<v1.size(); ++i) {
  66. for(; j<v2.size()&&v2[j]<v1[i]; ++j);
  67. if(j->=)ans=max(ans,lcp(v1[i],v2[j-]));
  68. if(j<v2.size())ans=max(ans,lcp(v1[i],v2[j]));
  69. }
  70. printf("%d\n",ans);
  71. return ;
  72. }

后缀自动机:

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. using namespace std;
  5. typedef long long ll;
  6. const int N=2e5+,M=,mod=;
  7. char s[N];
  8. int n,fa[N],go[N][M],mxl[N],last,tot;
  9. int newnode(int l) {int u=++tot; mxl[u]=l,memset(go[u],,sizeof go[u]); return u;}
  10. void add(int ch) {
  11. int p=last,np=last=newnode(mxl[p]+);
  12. for(; ~p&&!go[p][ch]; p=fa[p])go[p][ch]=np;
  13. if(!~p)fa[np]=;
  14. else {
  15. int q=go[p][ch];
  16. if(mxl[q]==mxl[p]+)fa[np]=q;
  17. else {
  18. int nq=newnode(mxl[p]+);
  19. memcpy(go[nq],go[q],sizeof go[q]);
  20. fa[nq]=fa[q],fa[q]=fa[np]=nq;
  21. for(; ~p&&go[p][ch]==q; p=fa[p])go[p][ch]=nq;
  22. }
  23. }
  24. }
  25. int main() {
  26. fa[]=-;
  27. scanf("%s",s),n=strlen(s);
  28. for(int i=; i<n; ++i)add(s[i]-'a');
  29. scanf("%s",s),n=strlen(s);
  30. int ans=;
  31. for(int i=,u=,l=; i<n; ++i) {
  32. int ch=s[i]-'a';
  33. if(!go[u][ch]) {
  34. for(; u&&!go[u][ch]; u=fa[u]);
  35. l=mxl[u];
  36. }
  37. if(go[u][ch])u=go[u][ch],++l;
  38. ans=max(ans,l);
  39. }
  40. printf("%d\n",ans);
  41. return ;
  42. }

POJ - 2774 Long Long Message (后缀数组/后缀自动机模板题)的更多相关文章

  1. (17/34)AC自动机/后缀数组/后缀自动机(施工中)

    快补题别再摸鱼了(17/34) 1.AC自动机 #define maxnode 1000010 #define maxsize 26 struct ahocT{ int ch[maxnode][max ...

  2. 字符串的模板 Manacher kmp ac自动机 后缀数组 后缀自动机

    为何scanf("%s", str)不需要&运算 经常忘掉的字符串知识点,最好不加&,不加&最标准,指针如果像scanf里一样加&是错的,大概是未定 ...

  3. 【整理】如何选取后缀数组&&后缀自动机

    后缀家族已知成员         后缀树         后缀数组         后缀自动机         后缀仙人掌         后缀预言         后缀Splay ? 后缀树是后缀数 ...

  4. loj6173 Samjia和矩阵(后缀数组/后缀自动机)

    题目: https://loj.ac/problem/6173 分析: 考虑枚举宽度w,然后把宽度压位集中,将它们哈希 (这是w=2的时候) 然后可以写一下string=“ac#bc” 然后就是求这个 ...

  5. 牛客网 桂林电子科技大学第三届ACM程序设计竞赛 A.串串-后缀自动机模板题

    链接:https://ac.nowcoder.com/acm/contest/558/A来源:牛客网 A.串串 小猫在研究字符串. 小猫在研究字串. 给定一个长度为N的字符串S,问所有它的子串Sl…r ...

  6. POJ 2774 Long Long Message 后缀数组

    Long Long Message   Description The little cat is majoring in physics in the capital of Byterland. A ...

  7. poj 2774 Long Long Message 后缀数组基础题

    Time Limit: 4000MS   Memory Limit: 131072K Total Submissions: 24756   Accepted: 10130 Case Time Limi ...

  8. 后缀数组(模板题) - 求最长公共子串 - poj 2774 Long Long Message

    Language: Default Long Long Message Time Limit: 4000MS   Memory Limit: 131072K Total Submissions: 21 ...

  9. [POJ 2774] Long Long Message 【后缀数组】

    题目链接:POJ - 2774 题目分析 题目要求求出两个字符串的最长公共子串,使用后缀数组求解会十分容易. 将两个字符串用特殊字符隔开再连接到一起,求出后缀数组. 可以看出,最长公共子串就是两个字符 ...

  10. POJ 2774 Long Long Message(后缀数组)

    [题目链接] http://poj.org/problem?id=2774 [题目大意] 求最长公共子串 [题解] 将两个串中间嵌一个字符相连,求一遍后缀数组 如果排名相邻的两个后缀的开端是分属于两个 ...

随机推荐

  1. 已经配置好了的 jmeter + ant 框架

    已经配置好了的 jmeter + ant 框架 ,需要自取,避免查找安装攻略时耗费时间 使用前需配置环境变量,阅读文件内安装文档!!! 链接:https://pan.baidu.com/s/1eRz9 ...

  2. webdriervAPI(窗口截图)

    from  selenium  import  webdriver driver  =  webdriver.Chorme() driver.get("http://www.baidu.co ...

  3. python+selenium显示等待、隐式等待和强制等待的区别

    在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中(a ...

  4. [转帖]处理器结构--PipeLine&SuperScalar

    处理器结构--PipeLine&SuperScalar https://www.jianshu.com/p/36c80a15a226  0.1 2018.06.12 16:12* 字数 148 ...

  5. mysql一个SQL案例

    需求 : 测试数据 ),start1 int,end1 int); ,); ,); ,); ,); ,); ,); 解决: 解决2: 解决代码 核心思想,把符合逻辑条件的行,构造相同分组 select ...

  6. c++ split(getline实现)

    众所周知 c++中string没有自带的split函数(亏你还是老大哥) 网上关于split函数的优秀写法很多 本人不再赘述 今几日翻C++API时发现了getline一个有趣的方法 istream& ...

  7. 2019年8月23日 星期五(Workerman)

    Workerman,高性能socket服务框架 Workerman是什么? Workerman是一款纯PHP开发的开源高性能的PHP socket 服务框架. Workerman不是重复造轮子,它不是 ...

  8. sklearn-GDBT

    GDBT 可以解决分类和回归问题 回归问题 def __init__(self, loss='ls', learning_rate=0.1, n_estimators=100, subsample=1 ...

  9. python-socketserver实例

    import socketserver class MyTCPHandler(socketserver.BaseRequestHandler): def handle(self): while Tru ...

  10. 程序员必备的网站之Tutorialspoint

    程序员必备的网站之Tutorialspoint 给大家介绍一个非常好的网站Tutorialspointhttp://www.tutorialspoint.com/index.htm,也许好多人都已经用 ...