之前考虑过如果输入样例很大怎么办,但是没有细想,今天看了看manachar,懊悔如果这个题样例增大一些变成L3 30分就好了hh,相比于洛谷上的模板题,这个题唯一不一样的就是有空格,所以不能再用char数组来保存,改用string来存储,C++中的getline 函数前几天刚了解到正好也派上用场了
const int N=1e6+10;
int t;
string s;
string ss;
int ans,len;
int d[N];
int cnt;
void init()
{
len=s.length();
cnt=1;
ss+='@';
ss+='&';
for(int i=0;i<len;i++)
{
ss+=s[i];
ss+='&';
}
}
void manachar()
{
d[1]=1;
for(int i=2,r=1,l;i<=ss.length();i++)
{
if(i<=r) d[i]=min(d[r-i+l],r-i+1);
while(ss[i-d[i]]==ss[i+d[i]]) d[i]++;
if(r<=i+d[i]-1) r=i+d[i]-1,l=i-d[i]+1;
ans=max(ans,d[i]-1);
}
}
void solve()
{
getline(cin,s);
init();
manachar();
cout<<ans;
return;
}
int main()
{
solve();
return 0;
}
`
标签:cnt,string,int,len,ss,ptaL2,做法,008manachar
From: https://www.cnblogs.com/marshuo/p/18085827