poj2774 Long Long Message 后缀数组
来源:互联网 发布:网站源码盗取工具 编辑:程序博客网 时间:2024/05/18 23:28
poj2774 Long Long Message
题意:求两个串的最长公共子串 n<=100000
题解:论文题&&模板题不多说了= =
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N=200005;int sa[N],c[N],t1[N],t2[N];int rank[N],height[N];char s1[N],s2[N],s[N];int n;bool pos[N];//rank[i] i串排名//sa[i] 第i的串为 void buildsa(int m){ int i,*x=t1,*y=t2; for(i=1;i<=m;i++) c[i]=0; for(i=1;i<=n;i++) c[x[i]=s[i]]++; for(i=1;i<=m;i++) c[i]+=c[i-1]; for(i=n;i>=1;i--) sa[c[x[i]]--]=i; for(int k=1;k<=n;k<<=1){ int p=0; for(i=n-k+1;i<=n;i++) y[++p]=i; for(i=1;i<=n;i++) if(sa[i]>k) y[++p]=sa[i]-k; for(i=1;i<=m;i++) c[i]=0; for(i=1;i<=n;i++) c[x[y[i]]]++; for(i=1;i<=m;i++) c[i]+=c[i-1]; for(i=n;i>=1;i--) sa[c[x[y[i]]]--]=y[i]; swap(x,y);p=1;x[sa[1]]=1; for(i=2;i<=n;i++) x[sa[i]]=y[sa[i]]==y[sa[i-1]]&&y[sa[i]+k]==y[sa[i-1]+k]?p:++p; if(p>=n) break; m=p; }}void getheight(){ int i,j,k=0; for(i=1;i<=n;i++) rank[sa[i]]=i; for(i=1;i<=n;i++){ if(k) k--; j=sa[rank[i]-1]; while(s[i+k]==s[j+k]) k++; height[rank[i]]=k; }}int main(){ freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); scanf("%s\n",s+1);scanf("%s\n",s2);int l=strlen(s+1); strcat(s+1,"#");strcat(s+1,s2);//printf("%s\n",s+1); n=strlen(s+1);//printf("%d\n",n); buildsa(128);getheight(); for(int i=1;i<=n;i++) pos[i]=sa[i]<=l?1:0; int ans=0; for(int i=2;i<=n;i++) if(pos[i]!=pos[i-1]) ans=max(ans,height[i]); printf("%d\n",ans); return 0;}
0 0
- POJ2774《Long Long Message》方法:后缀数组
- POJ2774:Long Long Message(后缀数组)
- 【后缀数组】【poj2774】【 Long Long Message】
- 后缀数组 - poj2774 Long Long Message
- 后缀数组 poj2774 Long Long Message
- 【POJ2774】Long Long Message【后缀数组】
- poj2774 Long Long Message 后缀数组
- 【poj2774】Long Long Message 后缀数组
- poj2774 Long Long Message(后缀数组)
- [POJ2774]Long Long Message(后缀数组)
- [后缀数组]poj2774 Long Long Message
- [POJ2774]Long Long Message(后缀数组)
- poj2774 Long Long Message(后缀数组)
- POJ2774 Long Long Message(后缀数组)
- POJ2774 Long Long Message 【后缀数组lcp】
- poj2774——Long Long Message(后缀数组)
- 【后缀数组】【最长公共子串】Long Long Message POJ2774
- [POJ2774][后缀数组求LCP]Long Long Message
- vim替换字符串
- 移动平台开发相关工具总结
- css overflow:hidden为什么会失效
- USB Packet capture for Windows Tour
- SpringMVC视图解析没按照ModelAndView的viewname跳转
- poj2774 Long Long Message 后缀数组
- Eclipse中修改Android SDK Manager路径
- C++ virtual函数 实现机制
- POJ1256 Anagram(回溯法)
- 第2章{ 2-6 包配置 }
- LeetCode: 113. Path Sum II
- 软件下载大全
- 自定义ViewGroup —— Tags标签布局
- oc之NSArray