1 条题解

  • 0
    @ 2025-10-19 23:00:05
    #include<bits/stdc++.h>
    using std::vector;
    
    #define rep(i,l,r) for(int i=l;i<=r;++i)
    #define pb push_back
    void chmax(int &x,int y)
    {
        if(x<y)x=y;
    }
    const int N=5e5+5;
    char s[N];int n,next[N];
    int to[N];
    vector<int>son[N];
    
    int pre[N],suf[N],mx;
    
    void del(int x)
    {
        if(x)
        {
            int p=pre[x],s=suf[x];
            chmax(mx,s-p);
            suf[p]=s;pre[s]=p;
        }
        for(vector<int>::iterator i=son[x].begin();i!=son[x].end();++i)
        if(*i!=to[x]) del(*i);
    }
    
    int main()
    {
        freopen("1.in","r",stdin);
        scanf("%s",s+1);
        n=strlen(s+1);
        int j=0;
        rep(i,2,n)
        {
            while(j&&s[j+1]!=s[i])j=next[j];
            if(s[j+1]==s[i]) next[i]=++j;
        }
        
        rep(i,1,n)son[next[i]].pb(i);
        for(int i=n;i;i=next[i]) to[next[i]]=i;
        
        rep(i,1,n) {pre[i]=i-1;suf[i]=i+1;}
        del(0);
        int i=1;
        while(mx>i) { del(i);i=to[i]; }
        printf("%d\n",i);
    }
    
    
    • 1

    信息

    ID
    1383
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者