杭电3068 最长回文 最长回文的manacher算法

来源:互联网 发布:java jar包日志输出 编辑:程序博客网 时间:2024/06/11 18:12

最长回文

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 12275    Accepted Submission(s): 4514


Problem Description
给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.
回文就是正反读都是一样的字符串,如aba, abba等
 

Input
输入有多组case,不超过120组,每组输入为一行小写英文字符a,b,c...y,z组成的字符串S
两组case之间由空行隔开(该空行不用处理)
字符串长度len <= 110000
 

Output
每一行一个整数x,对应一组case,表示该组case的字符串中所包含的最长回文长度.
 

Sample Input
aaaaabab
 

Sample Output
43
 

Source
2009 Multi-University Training Contest 16 - Host by NIT
 

Recommend
lcy   |   We have carefully selected several similar problems for you:  1358 3336 3065 3746 3067 


我就不详解了看这里 http://blog.csdn.net/xingyeyongheng/article/details/9310555

附ac代码:

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;char s[330000];int i,j,k,l,p[330000],m,n,id,Maxlen;int main(){while(scanf("%s",s)!=EOF){l=strlen(s);for(i=l;i>=0;i--){s[2*i+1]='#';s[2*i+2]=s[i];}id=0;Maxlen=0;s[0]='*';for(i=2;i<2*l+1;i++){if(p[id]+id>i)p[i]=min(p[2*id-i],p[id]+id-i);elsep[i]=1;while(s[i-p[i]]==s[i+p[i]])p[i]++;if(id+p[id]<i+p[i])id=i;if(Maxlen<p[i])Maxlen=p[i];}printf("%d\n",Maxlen-1);}}



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝打预防针的本子丢了怎么办 宝宝打预防针本子丢了怎么办 打疫苗的本子丢了怎么办 麦客收割机麦秸里加麦粒怎么办 高铁乘务员身高不够怎么办 坐火车买到站票怎么办 买上车补票原票怎么办? 买的商务座补票怎么办 12306账号被别人登录怎么办 飞机不提供餐食怎么办 12306退票支付宝失败怎么办 12306重复支付怎么办支付宝 支付宝登的12306账号怎么办 没买儿童高铁票怎么办 网上订的机票怎么办托运 半夜买高铁票不出票怎么办 轻轨少买了一站怎么办 高铁火车票丢了怎么办 如果高铁票丢了怎么办 高铁票丢了怎么办 报销 高铁如果没赶上怎么办 高铁管家待核验怎么办 动车没有票了怎么办 12306取消订单3次怎么办 【12306取消订单3次怎么办】 火车票取消订单3次怎么办 12306收不到验证码怎么办 安逸花验证码次数限制怎么办 航班晚点导致错过转机怎么办 想去沈阳站送站怎么办 高铁没有赶上车怎么办 火车晚点赶不上下一趟车怎么办 列车晚点影响下一趟车怎么办? 高铁晚点赶不上下班车怎么办 火车在半路坏了怎么办 做火车中途坏了怎么办 员工怀孕不上班保险怎么办 怀孕带孩子不能上班保险怎么办 怀孕了不想上班保险怎么办 高铁票没票了怎么办 购买动车票无座怎么办