[BZOJ2342][Shoi2011]双倍回文(manacher)
来源:互联网 发布:淘宝旺旺头像 编辑:程序博客网 时间:2024/06/05 19:23
题目描述
传送门
题解
这道题非常有趣的是,要将一个字符串劈开两次都是回文串。
实际上manacher了之后对于每一个大中心暴力找小中心就可以了,因为只有26个字符暴力是无法卡掉的。不过如果时间复杂度科学的话貌似可以写平衡树或者可持久化线段树之类的东西。
代码
#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 1000005int la,n,mx,id,l,r,loc,ans,ansi;char s[N],a[N];int p[N];int main(){ scanf("%d\n",&la);gets(a);s[0]='*'; for (int i=0;i<la;++i) s[++n]='#',s[++n]=a[i]; for (int i=1;i<=n;++i) { if (mx>i) p[i]=min(p[2*id-i],mx-i); else p[i]=1; while (s[i-p[i]]==s[i+p[i]]) ++p[i]; if (i+p[i]>mx) { mx=i+p[i]; id=i; } } for (int i=1;i<=n;i+=2) { l=(i-p[i]+1+i)/2;if (l%2==0) ++l; while (l<=i&&l+p[l]<i) l+=2; ans=max(ans,((i-l)/2)*4); } printf("%d\n",ans);}
0 0
- [BZOJ2342][Shoi2011]双倍回文(manacher)
- BZOJ2342: [Shoi2011]双倍回文【Manacher】
- [bzoj2342][Shoi2011]双倍回文 manacher
- 【bzoj2342】 SHOI2011 双倍回文 manacher+set
- 【BZOJ2342】【Shoi2011】双倍回文 Manacher算法
- [BZOJ2342] SHOI2011 双倍回文 manacher O(n)
- bzoj2342 [Shoi2011]双倍回文(manacher+暴力/set)
- 【bzoj2342】[Shoi2011]双倍回文
- [BZOJ2342] [Shoi2011]双倍回文
- bzoj2342【SHOI2011】双倍回文
- [bzoj2342][SHOI2011]双倍回文
- 【SHOI2011】bzoj2342 双倍回文
- bzoj2342 [Shoi2011]双倍回文
- bzoj2342 [Shoi2011] 双倍回文
- bzoj2342 [Shoi2011]双倍回文
- 【BZOJ2342】【Shoi2011】双倍回文 Manacher+枚举+最优性剪枝
- bzoj 2342: [Shoi2011]双倍回文(manacher)
- [回文自动机]bzoj2342: [Shoi2011]双倍回文
- 我的世界 Unity3D MineCraft 用Unity3D制作类似MineCraft我的世界的游戏 洞穴算是完成了
- CentOS7中IDEA或WPS无法切换中文输入法解决方案
- onTouch onClick onLongClick
- JDBC 详解 (二)
- 在Android项目中(百度地图),报错:key验证出错,请在AndroidManifest.xml文件中检查key设置
- [BZOJ2342][Shoi2011]双倍回文(manacher)
- iOS开发中,Your session has expired. Please log in.
- 11.文件与文件系统的压缩与打包
- Shell—输入/输出重定向
- 结构、联合、位字段、枚举
- lucene学习日志(一)
- 千分位格式化,并保留两位小数
- Java序列化技术性能分析(JDK原生与Protostuff)
- C 结构体与共用体的用法