题目描述
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;
}