求调
查看原帖
求调
743014
_H17_楼主2024/11/25 22:34
#include<bits/stdc++.h>
using namespace std;
constexpr int N=1.1e7+5;
char s[N<<1];
int n,f[N<<1];
int main(){
    cin>>(s+1);
    n=strlen(s+1);
    for(int i=(n<<1);i>0;i-=2)
        s[i]=s[i>>1],s[i+1]='#';
    s[0]='~',s[1]='#';
    for(int i=1,mid=0,r=0;i<=(n<<1);i++){
        if(i<=r)
            f[i]=min(f[(mid<<1)-i],r-i+1);
        while(s[i+f[i]+1]==s[i-f[i]-1])
            f[i]++;
        if(r<i+f[i])
            r=i+f[i],mid=i;
    }
    cout<<(*max_element(f+1,f+(n<<1)+1));
    return 0;
}
2024/11/25 22:34
加载中...