hdu 3294 Manacher模版题
来源:互联网 发布:机械电路设计软件 编辑:程序博客网 时间:2024/06/08 06:01
点击打开链接
#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int M =1010000;char s[M],t[M],c;int len,p[M]; // p[i] 以i为中心的回文 i到最右端长度 void Init(){int i;t[0]='@';for(int i=1;i<=2*len;i+=2){t[i]='#';t[i+1]=s[i/2];}t[2*len+1]='#';t[2*len+2]='$';t[2*len+3]=0;len=2*len+1;} void Manacher(){int mx=0,ans=0,po=0,l,r;for(int i=1;i<=len;i++){if(i<mx){//i关于po对称 j=2*po-i//p[i]>=p[j] p[j]超过po的范围 则p[i]对应的超出范围 尚未匹配无法判断 p[i]=min(p[2*po-i],mx-i);}else{p[i]=1;}while(t[i-p[i]]==t[i+p[i]]) {p[i]++;}if(i+p[i]>mx){mx=i+p[i];po=i;}if(ans<p[i]){ans=p[i];l=(i-p[i])/2;//记录原串左右位置 r=(i+p[i])/2-2;//}}// t中'#'个数比原串s长度始终大一 t的长度为 x+x-1=2*p[i]-1; 原串s长度为 p[i]-1 ans--;if(ans<2){cout<<"No Solution!"<<endl;return;}cout<<l<<" "<<r<<endl;c=c-'a';//后退c个 for(int i=l;i<=r;i++){s[i]-=c;if(s[i]<'a')s[i]+=26; cout<<s[i];}cout<<endl;}int main(){while(cin>>c){scanf("%s",s); len=strlen(s);Init();Manacher(); }return 0;}
0 0
- HDU 3294 Manacher模版题
- hdu 3294 Manacher模版题
- HDU 3068 Manacher 模版题
- hdu 3068 最长回文 (Manacher模版)
- HDU 3068 最长回文 【manacher模版】
- POJ 3974 Manacher模版题
- Manacher-模版题poj3974 hdu3068
- Manacher模版
- Manacher模版
- hdu 3294 manacher算法
- HDU 3294 manacher
- hdu3068 manacher模版
- [manacher] hdu 3294 Girls' research
- hdu 3294 Girls' research(manacher)
- HDU - 3294 Girls' research(manacher)
- hdu 3294 Girls' research【manacher】
- HDU 3294 Girls’ research Manacher
- HDU 3068 Manacher 模板题
- Service的两种启动方式onstartService和onbindService区别
- R语言常用命令集
- centos7下 tomcat的安装与配置
- python 循环读取txt文档 并转换成csv
- label for 属性究竟有啥用???
- hdu 3294 Manacher模版题
- eCryptfs - close系统调用
- 图像压缩编码和解码原理
- Android Studio你不知道的调试技巧
- Git命令行使用教程01
- 学习IOS第一天
- QT--一些零散的代码备份
- windows断电后启动mysql服务引起的问题
- 什么是开闭原则