1 条题解

  • 0
    @ 2025-10-5 21:23:30
    #include<iostream>
    #include <bits/stdc++.h>
    using namespace std;
    char s[22000005];
    char ss[22000005];
    int p[22000005];
    int lenss,lens,id=0,maxlen=0,maxn,cnt;
    int main()
    {
    //	  freopen("calf.in","r",stdin);
    //    freopen("calf.out","w",stdout);
        int i=0;
        while(scanf("%c",&s[i])!=EOF)
        {
            if(s[i]<=90&&s[i]>=65)
                ss[lenss++]=char(s[i]);
            else if(s[i]<=122&&s[i]>=97)
                ss[lenss++]=char(s[i]-32);
            i++;
        }
        for(int i=lenss; i>=0; --i) 
        {
            ss[i+i+2]=ss[i];
            ss[i+i+1]='#';
        }
        ss[0]='*';
        for(int i=2; i<2*lenss+1; ++i)
        {
            if(p[id]+id>i)p[i]=min(p[2*id-i],p[id]+id-i);
            else p[i]=1;
            while(ss[i-p[i]] == ss[i+p[i]])++p[i];
            if(id+p[id]<i+p[i])id=i;
            if(maxlen<p[i])
            {
                maxlen=p[i];
                maxn=i;
            }
        }
        cout<<maxlen-1<<endl;
        return 0;
    }
    
    • 1

    信息

    ID
    1487
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    3
    已通过
    3
    上传者