【Ural 1297】Palindrome manacher 最长回文子串
2017-03-17 19:16
369 查看
题目描述
The “U.S. Robots” HQ has just received a rather alarming anonymous letter. It states that the agent from the competing «Robots Unlimited» has infiltrated into “U.S. Robotics”. «U.S. Ro…………题目大意
↑题目描述不是重点,题目大意就是求最长的回文子串,如果有长度相同的则输出最靠前的。数据范围
长度小于20W,均为大写或小写字母。样例输入
ThesampletextthatcouldbereadedthesameinbothordersArozaupalanalapuazorA样例输出
ArozaupalanalapuazorA解题思路
manacher模板题代码
#include <algorithm> #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <cmath> using namespace std; int p[400005]; char s[400005]; int main(){ cin>>s; int len=strlen(s),id=0,ce,MaxLen=0; for(int i=len-1;i+1;i--){ s[i+i+1]=s[i]; s[i+i+2]='#'; } s[0]='#'; s[2*len]='^'; for(int i=1;i<=len*2;i++){ if(id+p[id]>i)p[i]=min(p[id+id-i],p[id]+id-i); else p[i]=0; while(s[i-p[i]]==s[i+p[i]])p[i]++; if(p[i]+i>p[id]+id){id=i;} if(p[id]>MaxLen){ MaxLen=p[id]; ce=i; } } for(int i=ce-p[ce]+1+(s[ce-p[ce]+1]=='#');i<=ce+p[ce]-1;i+=2) cout<<s[i]; return 0; }
相关文章推荐
- URAL 1297 Palindrome (最长回文子串)
- 【后缀数组|最长回文子串】URAL-1297 Palindrome
- URAL 1297. Palindrome(后缀数组 求最长回文子串)
- URAL 1297 Palindrome(最长回文子串 )
- URAL 1297 Palindrome(SA 求最长回文子串)
- HDU3068 URAL1297 Manacher求最长回文子串
- URAL 1297 Palindrome(后缀数组求最长回文子串)
- ural 1297 Palindrome求最长连续回文子串(后缀数组求法)
- ural 1297 Palindrome(最长回文子串)
- URAL 1297 Palindrome(最长回文子串:后缀数组)
- 【URAL】1297 Palindrome 【后缀数组+RMQ——求最长回文子串】
- ural1297 Palindrome,hdu 3068 最长回文,Manacher
- URAL 1297 Palindrome【后缀数组】求最长回文子串
- Ural 1297 Palindrome 【最长回文子串】
- URAL 1297. Palindrome(输出最长回文子串--后缀数组)
- Ural 1297 Palindrome(后缀数组+最长回文子串)
- URAL - 1297 Palindrome(后缀数组求最长回文子串)
- URAL-1297 Palindrome (最长回文子串)
- URAL 1297 Palindrome 最长回文子串
- 【URAL 1297】Palindrome 最长回文子串