1861: 斗破苍穹
来源:互联网 发布:mac os beta 编辑:程序博客网 时间:2024/04/28 19:48
1861: 斗破苍穹
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 199 Solved: 43
SubmitStatusWeb Board
Description
有一天, 我们帅气的LC来到加玛帝国. 有时候, 缘分就是这么奇怪, LC和加玛帝国的公主一见钟情, 奈何公主的父王不同意, 因为他觉得LC除了长得特别帅之外, 并没有一技之长.
LC对此呵呵一笑, 他说, 我可是创新实验室走出来的学生, 我会的技能可多着呢, 先说个简单的吧, 只要你给我任意一串字符串, 我就能立马算出这串字符串当中最长回文串的长度. 国王很是吃惊, 说要考一考LC.
于是国王想让你帮忙写一个程序, 用来比对LC的答案, 快来帮帮国王吧!
Input
第一行输入一个T(T <= 50), 表示一共有T组测试数据. 接下来T行, 每行为一组由小写字母组成, 长度不超过10^5的字符串.
Output
每行一个整数X, 表示该组字符串中所包含的最长回文长度.
Sample Input
3abaabcaabaa
Sample Output
315
#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#include<cmath>using namespace std;char a[100100];char s[100100<<1];int p[100100<<1];int ans;void Manacher(){int l,i;l=strlen(a);for( i=0;i<(l+1)<<1;i++){s[i]='#';p[i]=0;}for(i=0;i<l;i++)s[(i+1)<<1]=a[i];s[(i+1)<<1]=0;int mx,id;mx=0;id=0;for( i=1;s[i]!=0;i++){p[i]=1;if(mx>i) p[i]=min(mx-i,p[(id<<1)-i]);while(s[i-p[i]]==s[i+p[i]])++p[i];if(i+p[i]>mx){mx=i+p[i];id=i;}if(ans<p[i]-1)ans=p[i]-1;}}int main(){int t;scanf("%d",&t);while(t--){scanf("%s",a);ans=0;Manacher();printf("%d\n",ans);}return 0;}
0 0
- 1861: 斗破苍穹
- ZZULI 1861: 斗破苍穹【回文字符串】
- 斗破苍穹
- 斗破苍穹RPG
- 斗破苍穹
- 4》斗破苍穹
- 1861: 斗破苍穹 【最长回文子串】
- 斗破苍穹里的那些女人
- ZZULIOJ-1961 斗破苍穹(马拉车算法)
- 绝世奇书号斗破
- 爬取斗破苍穹整本小说
- 武动 斗破 萧炎 林动
- 如何破除迷惘,剑锋直指苍穹
- 腾飞之势,搏击苍穹:网页设计
- 龙凤斗
- 斗水
- 斗地主
- 斗金花
- 浅谈C++容器(二)
- 浅谈C++容器( 三)
- JSP调试遇到“the requested resource is not available”
- Java的继承
- web.xml入门讲解
- 1861: 斗破苍穹
- 浅谈C++容器(四)
- webservice 入门笔记五handler处理信息
- 第六周项目4 静态成员应用
- 我是一个线程
- 浅谈C++容器(五)
- MICS:副本和纠删码混合存储系统
- 容斥原理
- Android 四大组件之认识Service