poj 1743 Musical Theme(SAM解法)
2017-05-15 08:48
183 查看
【分析】
SAM好神奇...
搞出来Parent树,在上边乱搞乱搞就可以啦
(poj挂了,所以这个题还没有交,参考一下性质就好...)
【代码】
SAM好神奇...
搞出来Parent树,在上边乱搞乱搞就可以啦
(poj挂了,所以这个题还没有交,参考一下性质就好...)
【代码】
//poj 1743 Musical Theme #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #define inf 1e9+7 #define ll long long #define M(a) memset(a,0,sizeof a) #define fo(i,j,k) for(i=j;i<=k;i++) using namespace std; const int mxn=40005; int n,m,p,q,np,nq,tot,len,ans,root; int a[mxn],s[mxn],b[mxn],t[mxn],mx[mxn],mn[mxn]; int son[mxn][180],step[mxn],pre[mxn]; inline void sam() { int i,j; M(son),M(b); memset(mx,0,sizeof mx); memset(mn,0x3f,sizeof mn); fo(i,1,len) scanf("%d",&s[i]); fo(i,1,len-1) a[i]=s[i+1]-s[i]+88; len--; root=tot=np=1; fo(i,1,len) { int c=a[i]; p=np; step[np=(++tot)]=step[p]+1; while(p && !son[p][c]) son[p][c]=np,p=pre[p]; if(!p) { pre[np]=root; continue; } q=son[p][c]; if(step[q]==step[p]+1) pre[np]=q; else { step[nq=(++tot)]=step[p]+1; memcpy(son[nq],son[q],sizeof son[q]); pre[nq]=pre[q]; pre[np]=pre[q]=nq; while(p && son[p][c]==q) son[p][c]=nq,p=pre[p]; } } } int main() { int i,j; while(scanf("%d",&len) && len) { ans=0; sam(); fo(i,1,tot) b[step[i]]++; fo(i,1,len) b[i]+=b[i-1]; fo(i,1,tot) t[b[step[i]]--]=i; p=1; fo(i,1,len) { p=son[p][a[i]]; mn[p]=mx[p]=i; } for(i=tot;i>=1;i--) { int now=t[i],fa=pre[now]; ans=max(ans,min(mx[now]-mn[now]-1,step[now])); mx[fa]=max(mx[fa],mx[now]); mn[fa]=min(mn[fa],mn[now]); } ans++; if(ans<=4) ans=0; printf("%d\n",ans); } return 0; }
相关文章推荐
- poj1743 Musical Theme【解法二】
- POJ 1743 Musical Theme【SAM
- poj1743 Musical Theme【解法一】
- poj1743 Musical Theme(后缀数组|后缀自动机)
- POJ-1743 Musical Theme(后缀数组)
- POJ 1743 Musical Theme(二分+后缀数组)
- poj 1743 Musical Theme(后缀数组+二分答案+height数组分组)
- hihoCoder 1407 后缀数组二·重复旋律2 && POJ 1743 Musical Theme(最长不可重叠重复子串问题)
- [POJ 1743]Musical Theme(后缀数组)
- poj 1743 Musical Theme(后缀自动机)
- POJ-1743-Musical Theme(后缀数组+二分)
- poj_1743_Musical Theme(后缀数组)
- POJ 1743 Musical Theme(后缀数组)
- poj 1743 Musical Theme(后缀数组)
- POJ 1743 Musical Theme(后缀数组)
- POJ 1743 Musical Theme(后缀数组)
- POJ1743---Musical Theme(+后缀数组二分法)
- POJ1743 - Musical Theme(后缀数组)
- POJ 1743 Musical Theme(后缀数组)
- poj 1743 Musical Theme【后缀自动机】