自己rand了几百组全对,大概是输入输出格式问题?
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
string data;
int p[2*N];
char s[2*N];
int main()
{
while(cin>>data)
{
memset(p,0,sizeof(p));
memset(s,0,sizeof(s));
int len=data.size();
s[0]='~';
s[1]='#';
for(int i=0;i<len;i++)
{
s[i*2+2]=data[i];
s[i*2+3]='#';
}
len=len*2+2;
for(int i=1,r=0,mid=0;i<len;i++)
{
if(i<r)
{
p[i]=min(p[(mid*2)-i],r-i);
}
while(s[i-p[i]]==s[i+p[i]])
{
p[i]++;
}
if(i+p[i]>r)
{
r=i+p[i];
mid=i;
}
}
for(int i=1;i<len;i++)
{
p[i]--;
}
if(p[(len)/2]+(len)/2>=len-1)
{
cout<<data<<endl;
}
else
{
int al=N;
int ans;
for(int i=len-1;i>=1;i--)
{
if(i+p[i]==len-1)
{
if(i-p[i]-1<al)
{
al=i-p[i]-1;
ans=(i-p[i]-1)/2-1;
}
}
}
cout<<data;
for(int i=ans;i>=0;i--)
{
cout<<data[i];
}
cout<<endl;
}
data="";
}
return 0;
}