这个数据太水了吧,我写成这样都可以过
查看原帖
这个数据太水了吧,我写成这样都可以过
770640
Elaina_楼主2022/11/11 09:54
        if(hw[i]+1+mid>mr){
            mr=mid+hw[i];
            mid=i;
        }

记录

原代码

#include<bits/stdc++.h>
using namespace std;
const int F=60000000;

int num=1,mid,mr,out,len;
int hw[F];
char a[F];
string s;

void work(){
    for(int i=1;i<=num;i++){
        if(i<mr){
            hw[i]=min(hw[mid*2-i],mr-i+1);
        }
        else hw[i]=1;
        for(;a[i-hw[i]]==a[i+hw[i]];hw[i]++);
        if(hw[i]+1+mid>mr){
            mr=mid+hw[i];
            mid=i;
        }
    }
}

int main(){
    cin>>s;
    len=s.length();
    a[0]=a[1]='#';
    for(int i=0;i<len;i++){
        a[++num]=s[i];
        a[++num]='#';
    }
    a[++num]=0;
    work();
    for(int i=1;i<=num;i++){
        out=max(out,hw[i]);
    }
    printf("%d",out-1);
    return 0;
}
2022/11/11 09:54
加载中...