Jzoj3654 【APIO2014】回文串
来源:互联网 发布:硕鼠下载器mac版下载 编辑:程序博客网 时间:2024/05/21 07:55
题意:求出现次数*长度最大的回文串
很水的一道题直接用回文树可以切了
太菜并不会回文树,用了极慢的sam+manacher
manacher求出所有回文子串用sam在parent树上面倍增就可以求出一个串的出现次数,manacher是O(n)的,倍增lgn,整体复杂度nlgn
(分开的manacher比什么插入特殊符号的好写多了)
#include<stdio.h>#include<string.h>#include<algorithm>#define N 600010using namespace std;char str[N]; long long A=0;int s[N][26],mx[N],f[N],sz[N],pos[N];int n,cnt=1,lst=1,v[N],r[N],p[N][20],b[N];int extend(char c,int r){int p=lst,np=lst=++cnt,q,nq; c-='a'; mx[np]=mx[p]+1; sz[np]=1; pos[r]=np;for(;p&&!s[p][c];p=f[p]) s[p][c]=np;if(!p) return f[np]=1; q=s[p][c];if(mx[q]==mx[p]+1) f[np]=q;else{nq=++cnt; mx[nq]=mx[p]+1;f[nq]=f[q]; f[q]=f[np]=nq;memcpy(s[nq],s[q],26<<2);for(;p&&s[p][c]==q;p=f[p]) s[p][c]=nq;}}inline void query(int l,int r){int x=pos[r];for(int j=19;~j;--j)if(mx[p[x][j]]>=r-l+1) x=p[x][j];A=max(A,(r-l+1ll)*sz[x]);}int main(){freopen("palindrome.in","r",stdin);freopen("palindrome.out","w",stdout);scanf("%s",str+1); n=strlen(str+1);for(int i=1;i<=n;++i) extend(str[i],i);for(int i=1;i<=cnt;++i) ++v[mx[i]];for(int i=1;i<=n;++i) v[i]+=v[i-1];for(int i=cnt;i;--i) r[v[mx[i]]--]=i;for(int x,i=cnt;i;--i){x=r[i];sz[f[x]]+=sz[x];}for(int i=1,x;i<=cnt;++i){x=r[i]; p[x][0]=f[x];for(int j=1;j<20;++j) p[x][j]=p[p[x][j-1]][j-1];}int mx=0,id; *str='+'; str[n+1]='*';for(int i=1;i<=n;++i){if(mx>i) b[i]=min(mx-i,b[2*id-i-1]);else b[i]=0;for(;str[i+b[i]+1]==str[i-b[i]];++b[i]) query(i-b[i],i+b[i]+1);if(b[i]+i>mx) mx=b[i]+i,id=i;}mx=0;for(int i=1;i<=n;++i){if(mx>i) b[i]=min(mx-i-1,b[2*id-i]);else { b[i]=1; query(i,i); }for(;str[i+b[i]]==str[i-b[i]];++b[i]) query(i-b[i],i+b[i]);if(b[i]+i>mx) mx=b[i]+i,id=i;}printf("%lld\n",A);}
Pam的后面学了再补上 阅读全文
1 0
- Jzoj3654 【APIO2014】回文串
- [Apio2014]回文串
- bzoj3676: [Apio2014]回文串
- 【APIO2014】【BZOJ3676】回文串
- BZOJ3676: [Apio2014]回文串
- [bzoj3676][APIO2014]回文串
- bzoj3676【APIO2014】回文串
- [BZOJ3679][Apio2014]回文串
- BZOJ3676: [Apio2014]回文串
- 【bzoj3676】[Apio2014]回文串
- bzoj3676: [Apio2014]回文串
- 3676: [Apio2014]回文串
- 3676: [Apio2014]回文串
- 【BZOJ 3676】 [Apio2014]回文串
- BZOJ 3676: [Apio2014]回文串
- BZOJ 3676 Apio2014 回文串 回文自动机
- BZOJ 3672([Apio2014]回文串-回文树)
- Bzoj3676:[Apio2014]回文串:回文自动机
- 神经网络——BP算法
- java.lang.IndexOutOfBoundsException: Index: 0, Size: 0解决方案
- 线程池
- Duilib源码 "类" 逻辑分析.
- 菜鸟大一新手编写的三位数从小到大排列程序
- Jzoj3654 【APIO2014】回文串
- PowerDesigner16 状态图
- maven私服nexus搭建
- Angularjs遇见的启动失败
- 百度SDK之方向传感器的应用
- PAT乙级1072. 开学寄语(20)
- 双向链表(c++封装)
- NOIP2006 2^k进制数
- python之实战----逻辑回归战iris